//處理可空枚舉類型:原理它是值類型,原始寫法是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把數字轉成泛型的第一個參數的類型