system.reflection 问题,GetFields 未返回所有内容

Issue with system.reflection, GetFields not returning everything

我对 System.Reflection 有点问题。请看附件代码:

class Program
{
    public static FieldInfo[] ReflectionMethod(object obj)
    {
        var flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly;
        return obj.GetType().GetFields(flags);
    }
        static void Main()
    {
        var test = new Test() { Id = 0, Age = 12, Height = 24, IsSomething = true, Name = "Greg", Weight = 100 };
        var res = ReflectionMethod(test);
    }
}

    public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsSomething { get; set; }
    public int Weight { get; set; }
    public int Height { get; set; }
    public int CalculationResult => Weight * Height;

    public Test()
    {

    }
}

似乎 getfields 方法没有获得计算的 属性 CalculationResult。我假设我需要使用另一个标志,但我不知道它是哪个。

在此先致谢,如有必要,我很乐意提供更多信息。

那是因为它是 属性 而不是字段。

=> 是 getter 的语法糖,它是 属性。所以它等价于:

public int CalculationResult 
{ 
   get 
   { 
      return Weight * Height; 
   }
}

所以你需要使用.GetProperties(flags)

嗯,分析这行代码:

public int CalculationResult => Weight * Height;

也可以简化为(没有 C# 6.0 语法糖):

public int CalculationResult {get { return Weight*Height; } }

编译器不创建支持字段,因为它不是自动的属性,这就是为什么它不在通过反射调用从 class 检索到的字段中的原因。

如果您将其更改为 public int CalculationResult { get; },它将创建字段并显示在列表中。