程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 通過反射,如何將數值型枚舉值賦值給枚舉類型的屬性

通過反射,如何將數值型枚舉值賦值給枚舉類型的屬性

編輯:關於.NET
//處理可空枚舉類型:原理它是值類型,原始寫法是Nullable<EnumX>,泛型可以有多個類型參數,但數據庫的一個欄位只會有一個類型,所以判斷第一個類型參數是否是枚舉
                        if (prop.PropertyType.IsValueType &&
                            prop.PropertyType.IsGenericType &&
                            prop.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)) &&
                            prop.PropertyType.GetGenericArguments()[0].IsEnum
                            )
                        {
                            var enumValue = Enum.Parse(prop.PropertyType.GetGenericArguments()[0], v + "");
                            prop.SetValue(res, enumValue, null);
                        }

以上舉例代碼屬性的類型是一個可空枚舉類型。

枚舉類型是一個泛型,且泛型的Type定義是Nullable<>

[0]是泛型的第一個參數。

如該屬性如下

 

        public Gender? Gender { get; set; }

這是縮寫寫法,完整寫法是

        public Nullable<Gender> Gender { get; set; }

所以可空枚舉類型的泛型參數有且僅有一個參數,直接寫索引0[0]不會有問題了。(泛型至少會有一個參數)

要判斷Gender是不是枚舉類型,然後才需要用Enum.Parse把數字轉成泛型的第一個參數的類型

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved