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; }
,它将创建字段并显示在列表中。
我对 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; }
,它将创建字段并显示在列表中。