2016-07-05 68 views
0

我的項目的WinForms C#設置價值領域也有這樣的:如何使用反射

private clsDTO_Error DTO_Error; --> Have PropertyName = ID 
private clsDTO_Right DTO_Right; 
FieldInfo f = this.GetType().GetField(DTO_Error, BindingFlags.NonPublic | BindingFlags.Instance); 

這個例子是正常

DTO_Right.GetType()的getProperty(屬性名).SetValue(。 DTO_Right,「OK」,null); 。

f.FieldType.GetProperty( 「ID」)的SetValue(DTO_Error, 「OK」,NULL);

我在這一個問題:

f.FieldType.GetProperty( 「ID」)的SetValue(f.FieldType, 「ERROR」,NULL);。

這個任何想法?

謝謝!

+1

請注意,屬性是不一樣的領域,反映在乎這種區別。您可以簡單地爲'DTO_Error'應用相同的代碼,就像您對'DTO_Right'所做的一樣(就我從上面的代碼中可以看到的那樣;它是:獲取'DTO_Error'類型,找到該屬性,調用SetValue' 。對財產提供'DTO_Error'實例和屬性值,而不是扔扳手到這裏工作,使用DLR:'動態errorDto =(動態)DTO_Error; errorDto.ID =值;' –

+0

我不知道我接下來會打電話給哪一個領域,所以我用字段信息,而且DTO_Right我確切地知道 –

+0

---------------- 我不太明白 我有很多重複的動作必須這樣使用 –

回答

0

我有我的回答,我使用Directionary

private Dictionary<string, object> myDictionary = new Dictionary<string, object>(); 
//Add this in Form Load 
myDictionary.Add("DTO_Error", DTO_Error); 
//Set Value 
PropertyInField.SetValue(myDictionary[DTO_Error], "OK", null); 
+0

[Data binding MSDN](https://msdn.microsoft.com/en-us/library/ef2xyb33(v = vs.110).aspx) –

0

也許:

f.FieldType.GetProperty( 「ID」)的SetValue(此, 「ERROR」,NULL);

+0

錯誤也是! :( ''f.FieldType.GetProperty(「ID」).SetValue(this,「Test」,null)'拋出了'System.Reflection.TargetException'類型的異常\t void {System.Reflection.TargetException} –