繁体   English   中英

Type.GetFields返回公共字段的空System.Reflection.FieldInfo数组

[英]Type.GetFields return an empty System.Reflection.FieldInfo array for public fields

我有一个只包含相当标准类型的公共字段的类。 调用myObject.GetType().GetFields()返回一个空数组。

可能是什么问题?

更新:对不起大家,问题是我正在使用WCF服务公开的类。 原始类(例如A)和公开类(WcfReference.A)是不同的类。 A的成员成为WcfReference.A中的私有字段,并作为属性公开。

也许应该删除该问题。

没有参数的GetFields()将返回您类型的公共字段(不是@Kenneth Ito注意到的属性)。

public class Test {
   public string var_;//I'm a public field, I'll be returned
   private int id_; //I'm a private field, you'll have to do more to get me
   public int Id {get { return id_;} set {id_=value;}} //I'm a property, I don't feel concerned
}

如果你这样做

var test = new Test();
test.GetType().GetFields();

将返回一个包含一项的数组:var_

在旧版本的.NET(我要向1.1项目中添加功能,对不起),默认方法GetFields()将返回一个空数组。 在1.1之后,他们更新了此方法以包括所有公共属性。 我不知道他们为什么要进行此更改,因为已经有可以执行相同操作的GetProperties()方法。

这种方法是进入私有领域的方法,因此了解如何使用它至关重要。 方法GetFields(BindingFlags flags)的重载。 这使用BindingFlags的组合来确定要从对象中获取哪些字段。

因此,如果您想要实例私有字段,则可以调用:

GetFields(BindingFlags.Instance | BindingFlags.NonPublic);

如果只需要公共静态属性,则可以调用:

GetFields(BindingFlags.Static | BindingFlags.Public);

您还可以继续为所有静态字段组合它们:

GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);

还有许多其他类型的BindingFlags ,因此请查看上面链接的MSDN页面,以获取您可能需要的其他任何信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM