C# 中屬性PropertyInfo的setvalue用法說(shuō)明
下面是關(guān)于setvalue方法的介紹以及錯(cuò)誤簡(jiǎn)介
用索引化屬性的可選索引值設(shè)置指定對(duì)象的該屬性值。
C#
public virtual void SetValue (object obj, object value, object[] index);
參數(shù)
obj Object
將設(shè)置其屬性值的對(duì)象。
value Object
新的屬性值。
index Object[]
索引化屬性的可選索引值。 對(duì)于非索引化屬性,該值應(yīng)為 null。
實(shí)現(xiàn)
SetValue(Object, Object, Object[])
異常
ArgumentException
index 數(shù)組不包含所需的參數(shù)類型。
或 找不到該屬性的 set 取值函數(shù)。
或 - value 無(wú)法轉(zhuǎn)換為 PropertyType的類型。
TargetException
在適用于 Windows 應(yīng)用商店應(yīng)用的 .NET 或可移植類庫(kù)中,改為捕獲 Exception。
該對(duì)象與目標(biāo)類型不匹配,或者某屬性是實(shí)例屬性但 obj 為 null。
TargetParameterCountException
index 中的參數(shù)數(shù)量與索引屬性采用的參數(shù)數(shù)量不匹配。
MethodAccessException
在適用于 Windows 應(yīng)用商店應(yīng)用的 .NET 或可移植類庫(kù)中,改為捕獲基類異常 MemberAccessException。
試圖非法訪問(wèn)類中的私有或受保護(hù)方法。
TargetInvocationException
設(shè)置屬性值時(shí)出錯(cuò)。 例如,為一個(gè)索引屬性指定的索引值超出范圍。 InnerException 屬性指示出錯(cuò)的原因。
例子
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (Control control in this.Controls )//獲取控件中所有值,添加到字典中
{
if (control is TextBox ||control is ComboBox ||control is DateTimePicker )
{
dic.Add (control.Name, control.Text);
}
}
PropertyInfo[] propertys = incomingnews.GetType().GetProperties();
foreach (PropertyInfo property in propertys)//運(yùn)用propertyinfo的映射方法,給實(shí)體類incomingnews的所有屬性賦值。
{
for (int i = 0; i<dic.Count; i++)
{
property.SetValue(incomingnews, dic[property.Name].ToString(), null);
}
}
之前有個(gè)小錯(cuò)誤一直弄不出來(lái),后來(lái)看了錯(cuò)誤提示“index 數(shù)組不包含所需的參數(shù)類型。
或 找不到該屬性的 set 取值函數(shù)。
或 value 無(wú)法轉(zhuǎn)換為 PropertyType的類型。”
發(fā)現(xiàn)自己想要賦值的實(shí)體類不是實(shí)體的屬性,而是實(shí)體的字段,所以setvalue方法就捕捉不到我想要賦值的這些字段,只需要將這些字段設(shè)置為自動(dòng)屬性即可。
補(bǔ)充:C# Property.SetValue()利用反射給某個(gè)泛型對(duì)象的屬性賦值的問(wèn)題
問(wèn)題描述:
在一個(gè)泛型方法中,實(shí)例化一個(gè)泛型對(duì)象后,利用反射獲取該泛型中的所有屬性,再給該對(duì)象的這些屬性賦值,打斷點(diǎn)發(fā)現(xiàn),泛型對(duì)象被實(shí)例化出來(lái)了,沒(méi)有問(wèn)題;所要賦值的屬性值也沒(méi)有問(wèn)題,但調(diào)用Property.SetValue()后,泛型對(duì)象中的值就是賦不上。
問(wèn)題解決:
調(diào)用該泛型方法時(shí),傳入的類型是個(gè)結(jié)構(gòu)體。。這個(gè)方法只支持class,不支持struct。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
C#實(shí)現(xiàn)多線程啟動(dòng)停止暫停繼續(xù)的示例代碼
本文主要介紹了C#實(shí)現(xiàn)多線程啟動(dòng)停止暫停繼續(xù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡(jiǎn)單使用
這篇文章主要介紹了C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡(jiǎn)單使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
C#泛型集合類System.Collections.Generic
這篇文章介紹了C#中的泛型集合類System.Collections.Generic,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
使用Deflate算法對(duì)文件進(jìn)行壓縮與解壓縮的方法詳解
本篇文章是對(duì)使用Deflate算法對(duì)文件進(jìn)行壓縮和解壓縮的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
C#簡(jiǎn)單查詢SQLite數(shù)據(jù)庫(kù)是否存在數(shù)據(jù)的方法
這篇文章主要介紹了C#簡(jiǎn)單查詢SQLite數(shù)據(jù)庫(kù)是否存在數(shù)據(jù)的方法,涉及C#調(diào)用SQLite組件及針對(duì)SQLite數(shù)據(jù)庫(kù)基本的連接、查詢、關(guān)閉等使用技巧,需要的朋友可以參考下2016-07-07
C#/VB.NET讀取條碼類型及條碼在圖片中的坐標(biāo)位置實(shí)例
我們?cè)趧?chuàng)建條形碼時(shí),如果以圖片的方式將創(chuàng)建好的條碼保存到指定文件夾路徑,可以在程序中直接加載圖片使用;已生成的條碼圖片,需要通過(guò)讀取圖片中的條碼信息,如條碼類型、條碼繪制區(qū)域在圖片中的四個(gè)頂點(diǎn)坐標(biāo)位置等,可參考本文中的方法2023-10-10
unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作
這篇文章主要介紹了unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
C# 獲取某個(gè)時(shí)間的0點(diǎn)0分和23點(diǎn)59分59秒
這篇文章主要介紹了C# 獲取某個(gè)時(shí)間的0點(diǎn)0分和23點(diǎn)59分59秒,文中給大家提到了java 獲取某一日期的0點(diǎn)0分0秒和23點(diǎn)59分59秒,需要的朋友可以參考下2019-09-09

