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

C# 为什么GetFields()不返回任何内容?,c#,C#,我试图检索对象的公共属性,但它什么也不返回。你能告诉我我做错了什么吗 public class AdHocCallReportViewModel : ReportViewModel { public string OperatorForCustEquipID { get; set; } public string OperatorForPriorityID { get; set; } public string OperatorForCallTypeID { get; s

我试图检索对象的公共属性,但它什么也不返回。你能告诉我我做错了什么吗

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返回零项。

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


再想一想,我发现您正在明确筛选公共字段。该类没有任何公共字段。编译器自动生成作为属性备份存储的字段是私有的。

如果您试图获取字段,则应尝试调用
GetProperties()
如果您没有公共字段。它们是财产。因此,请尝试
type.GetProperties()

重复我的答案,因此采用+1=)这是不诚实的,作者接受了你的答案,我的答案是先给出的,而且答案是一样的(像这样的琐碎问题和答案经常会在几秒钟内提交。这与不诚实无关。有时你是臭虫,有时你是防风罩。如果你需要获取公共属性,而不是字段,为什么要使用此选项?Restuta:如果你想要公共属性,你不会这样做。不清楚OP试图做什么。由于他使用了
GetFields
,我假设他正在查找字段。无论如何,应该指出的是,对象确实有字段,但它们是私有的。但是由于OP实现的类只有属性,因此更可能假设他正在查找属性,也可能是因为他似乎在找公众的。