C#中屬性PropertyInfo的setvalue方法

下面是關於setvalue方法的介紹以及錯誤簡介
用索引化屬性的可選索引值設置指定對象的該屬性值。
C#

public virtual void SetValue (object obj, object value, object[] index);

參數
obj Object
將設置其屬性值的對象。
value Object
新的屬性值。
index Object[]
索引化屬性的可選索引值。 對於非索引化屬性,該值應爲 null。
實現

SetValue(Object, Object, Object[])

異常

ArgumentException

index 數組不包含所需的參數類型。
或 找不到該屬性的 set 取值函數。

  • 或 - value 無法轉換爲 PropertyType的類型。
TargetException

在適用於 Windows 應用商店應用的 .NET 或可移植類庫中,改爲捕獲 Exception。

該對象與目標類型不匹配,或者某屬性是實例屬性但 obj 爲 null。
TargetParameterCountException
index 中的參數數量與索引屬性採用的參數數量不匹配。

MethodAccessException

在適用於 Windows 應用商店應用的 .NET 或可移植類庫中,改爲捕獲基類異常 MemberAccessException。

試圖非法訪問類中的私有或受保護方法。
TargetInvocationException
設置屬性值時出錯。 例如,爲一個索引屬性指定的索引值超出範圍。 InnerException 屬性指示出錯的原因。

例子

 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)//運用propertyinfo的映射方法,給實體類incomingnews的所有屬性賦值。
            {
                for (int i = 0; i<dic.Count; i++)
                {
                    property.SetValue(incomingnews, dic[property.Name].ToString(), null);
                }
            }

之前有個小錯誤一直弄不出來,後來看了錯誤提示“index 數組不包含所需的參數類型。或 找不到該屬性的 set 取值函數。- 或 - value 無法轉換爲 PropertyType的類型。”發現自己想要賦值的實體類不是實體的屬性,而是實體的字段,所以setvalue方法就捕捉不到我想要賦值的這些字段,只需要將這些字段設置爲自動屬性即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章