任何人都可以帮助我吗?
我有一些我写过的反射代码,它似乎运行良好但是在尝试将“this”传递给GetValue时会给我一个错误。
我有点陷入困境,我认为问题在于我在frmMain中运行反射代码,而AbCCompany是在另一个项目中定义的,但我有一个参考。
我收到错误
在'MyApp.Companies.Config'类型上定义的字段'AbcCompany'不是 目标对象上的字段,类型为“MyApp.frmMain”。
这是代码..
var companies = MyIems.Companies.GetType().GetFields();
foreach (var list in companies )
{
List<CompanyBase> thisCompanyCollection = (List<CompanyBase>)list.GetValue(this);
foreach (var company in thisCompanyCollection )
{
Console.WriteLine();
}
}
修改
我忘记提到Inside“Companies”有很多List,其中xxx是一个类..所有类都继承自CompanyBase。即AbcCompany
答案 0 :(得分:4)
您需要传递this
的实例,而不是将GetValue
传递给MyApp.Companies.Config
。
如果查看the documentation,您可以看到获得的异常是因为obj
参数不是声明当前字段的类型(或从其继承)。
假设MyApp.Companies.Config
具有无参数构造函数,则以下内容应该起作用:
var type = MyItems.Companies.GetType();
var instance = type.GetConstructor(System.Type.EmptyTypes).Invoke(null);
foreach(var list in type.GetFields())
{
List<CompanyBase> thisCompanyCollection = (List<CompanyBase>)list.GetValue(instance);
foreach(var company in thisCompanyCollection)
{
Console.WriteLine(company);
}
}