91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#之怎樣通過對象屬性名修改值

發布時間:2020-05-11 16:02:08 來源:億速云 閱讀:912 作者:Leah 欄目:編程語言

今天小編就為大家帶來一篇C#中怎樣通過對象屬性名修改值的文章。小編覺得挺不錯的,為此分享給大家做個參考。一起跟隨小編過來看看吧。

給一個對象屬性賦值可以通過PropertyInfo.SetValue()方式進行賦值,但要注意值的類型要與屬性保持一致。

創建對象實例的兩種方法:

1.


var obj = Assembly.Load("AssemblyName").CreateInstance("AssemblyName"+"ClassFullName");

2.

 var
 obj = Activator.CreateInstance(ClassType);

創建好實例時,現在可以給當前實例的某個屬性賦值,首先獲取要賦值的屬性。


var property = obj.GetType().GetProperty("PropertyName");//此時可以使用GetProperty獲取屬性數組,循環進行賦值,這里主要講解類型問題。

賦值可通過PropertyInfo.SetValue()方法,詳見MSDN。

情況1,該屬性類型是已知類型,例如:int


int value=500;
property.SetValue(obj,value,null);

這里需要注意value值的類型必須和屬性類型一致,否則會拋出TargetException異常。

情況2,該屬性類型是已知類型,原值是其他類型。例如:目標類型為int,值為string


string value="500";
property.SetValue(obj,int.TryParse(value),null);//類型轉換。

前兩種情況都很簡單,有時業務會比較復雜,對目標類型不確定,需要程序運行時判斷。

情況3,該屬性類型是未知非泛型類型,不確定目標類型,如何進行類型轉換。


object value="500";
property.SetValue(obj,Convert.ChangeType(value,property.PropertyType),null);//類型轉換。

這樣就可以解決大多數問題了。

不知道大家有沒有注意,我在第三種情況強調了非泛型,難道泛型就不行了嗎?
是的。如果只是用Convert.ChangeType()方法,類型轉換仍然報錯,先看下面的代碼。

即使目標類型和值的類型是一致,通過Convert.ChangeType()進行轉換仍然報錯。
解決這個問題,就要先把屬性值類型轉成基類型后,在進行Convert轉換。看代碼這樣,在使用Convert.ChangeType()轉換可空類型時,就不會報錯了。
再增加一些基礎的判斷驗證,代碼就比較完善了。


if (!property.PropertyType.IsGenericType)
            {                //非泛型
                property.SetValue(obj, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, property.PropertyType), null);
            }            else
            {                //泛型Nullable<>
                Type genericTypeDefinition = property.PropertyType.GetGenericTypeDefinition();                
                if (genericTypeDefinition == typeof(Nullable<>))
                {
         property.SetValue(obj, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, Nullable.GetUnderlyingType(property.PropertyType)), null);
                }
            }

上述就是C#中怎樣通過對象屬性名修改值的詳細內容,詳細使用情況還需要大家自己動手實驗使用過才能領會。如果想了解更多,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌珠穆沁旗| 栾川县| 海淀区| 松江区| 雷州市| 南康市| 宜昌市| 翁源县| 禄劝| 岳阳县| 建平县| 宜川县| 鱼台县| 曲水县| 镶黄旗| 富宁县| 克什克腾旗| 桑日县| 和顺县| 新郑市| 达孜县| 布尔津县| 高安市| 收藏| 聂荣县| 静乐县| 铁力市| 阿拉善左旗| 安平县| 上犹县| 交城县| 繁峙县| 沙河市| 依安县| 中宁县| 丹江口市| 虎林市| 峨边| 新宁县| 阿瓦提县| 祁阳县|