0

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

问题可能是什么?

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

也许应该删除这个问题。

4

2 回答 2

5

不带参数的 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_

于 2012-05-07T16:53:38.330 回答
0

在旧版本的 .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 页面,了解您可能需要的任何其他类型。

于 2014-07-15T14:08:35.660 回答