C#:使用反射来访问类中的所有字段,返回错误

时间:2011-08-18 16:04:07

标签: c# .net reflection

任何人都可以帮助我吗?

我有一些我写过的反射代码,它似乎运行良好但是在尝试将“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

1 个答案:

答案 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);
    }
}