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