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


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM