2016-07-05 66 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} –