我对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。我假设我需要使用另一个标志,但我无法弄清楚它是哪一个。
提前致谢,如果有必要,我很乐意提供更多信息。
答案 0 :(得分:4)
那是因为它是属性而不是字段。
=>
是一个属性的getter的语法糖。所以它是公平的:
public int CalculationResult
{
get
{
return Weight * Height;
}
}
所以你需要使用.GetProperties(flags)
答案 1 :(得分:2)
好吧,分析这行代码:
public int CalculationResult => Weight * Height;
也可以简化为(没有C#6.0语法糖):
public int CalculationResult {get { return Weight*Height; } }
编译器没有创建支持字段,因为它不是自动属性,这就是为什么它不在反射调用从类中检索的字段中。
如果您将其更改为public int CalculationResult { get; }
,则会创建该字段,该字段将显示在列表中。