为什么GetFields()不返回任何内容?

时间:2010-01-13 16:07:38

标签: c#

我正在尝试检索对象的公共属性,但它什么也没有返回。你能告诉我我做错了吗?

public class AdHocCallReportViewModel : ReportViewModel
{
    public string OperatorForCustEquipID { get; set; }
    public string OperatorForPriorityID { get; set; }
    public string OperatorForCallTypeID { get; set; }
    public string OperatorForStatusID { get; set; }
}

public UpdateReportParameters(AdHocCallReportViewModel rvm)
{
    var type = rvm.GetType();
    foreach (var f in type.GetFields().Where(f => f.IsPublic))
    {
        Console.WriteLine(f.Name);
        Console.WriteLine(f.GetValue(rvm).ToString());
    }
}  

当单步执行代码时,它会跳过foreach循环,因为GetFields返回零项。

3 个答案:

答案 0 :(得分:25)

你没有公共领域。他们是财产。因此,请尝试使用type.GetProperties()

答案 1 :(得分:8)

您正在尝试获取字段,您应该尝试拨打GetProperties()

答案 2 :(得分:1)

传递BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public以获取所有实例字段。

第二个想法,我看到你明确过滤公共领域。该课程没有任何公共领域。编译器作为属性的后备存储自动生成的字段是私有的。