C#如何通過對象屬性名稱修改值的執行個體

來源:互聯網
上載者:User

摘自:csdn

給一個對象屬性賦值可以通過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);                }            }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.