今天小編就為大家?guī)硪黄狢#中怎樣通過對象屬性名修改值的文章。小編覺得挺不錯(cuò)的,為此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)建站成立于2013年,我們提供高端成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、全網(wǎng)營銷推廣、小程序設(shè)計(jì)、微信公眾號開發(fā)、成都網(wǎng)站營銷服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為PE包裝袋企業(yè)提供源源不斷的流量和訂單咨詢。
給一個(gè)對象屬性賦值可以通過PropertyInfo.SetValue()方式進(jìn)行賦值,但要注意值的類型要與屬性保持一致。
創(chuàng)建對象實(shí)例的兩種方法:
1.
var obj = Assembly.Load("AssemblyName").CreateInstance("AssemblyName"+"ClassFullName");
2.
var obj = Activator.CreateInstance(ClassType);
創(chuàng)建好實(shí)例時(shí),現(xiàn)在可以給當(dāng)前實(shí)例的某個(gè)屬性賦值,首先獲取要賦值的屬性。
var property = obj.GetType().GetProperty("PropertyName");//此時(shí)可以使用GetProperty獲取屬性數(shù)組,循環(huán)進(jìn)行賦值,這里主要講解類型問題。
賦值可通過PropertyInfo.SetValue()方法,詳見MSDN。
情況1,該屬性類型是已知類型,例如:int
int value=500; property.SetValue(obj,value,null);
這里需要注意value值的類型必須和屬性類型一致,否則會(huì)拋出TargetException異常。
情況2,該屬性類型是已知類型,原值是其他類型。例如:目標(biāo)類型為int,值為string
string value="500"; property.SetValue(obj,int.TryParse(value),null);//類型轉(zhuǎn)換。
前兩種情況都很簡單,有時(shí)業(yè)務(wù)會(huì)比較復(fù)雜,對目標(biāo)類型不確定,需要程序運(yùn)行時(shí)判斷。
情況3,該屬性類型是未知非泛型類型,不確定目標(biāo)類型,如何進(jìn)行類型轉(zhuǎn)換。
object value="500"; property.SetValue(obj,Convert.ChangeType(value,property.PropertyType),null);//類型轉(zhuǎn)換。
這樣就可以解決大多數(shù)問題了。
不知道大家有沒有注意,我在第三種情況強(qiáng)調(diào)了非泛型,難道泛型就不行了嗎?
是的。如果只是用Convert.ChangeType()方法,類型轉(zhuǎn)換仍然報(bào)錯(cuò),先看下面的代碼。
即使目標(biāo)類型和值的類型是一致,通過Convert.ChangeType()進(jìn)行轉(zhuǎn)換仍然報(bào)錯(cuò)。
解決這個(gè)問題,就要先把屬性值類型轉(zhuǎn)成基類型后,在進(jìn)行Convert轉(zhuǎn)換??创a這樣,在使用Convert.ChangeType()轉(zhuǎn)換可空類型時(shí),就不會(huì)報(bào)錯(cuò)了。
再增加一些基礎(chǔ)的判斷驗(yàn)證,代碼就比較完善了。
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#中怎樣通過對象屬性名修改值的詳細(xì)內(nèi)容,詳細(xì)使用情況還需要大家自己動(dòng)手實(shí)驗(yàn)使用過才能領(lǐng)會(huì)。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文名稱:C#之怎樣通過對象屬性名修改值
文章出自:http://jinyejixie.com/article34/ggshpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、App設(shè)計(jì)、網(wǎng)站營銷、網(wǎng)站建設(shè)、網(wǎng)站排名、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)