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();

1つのアイテムを持つ配列を返します: var_

于 2012-05-07T16:53:38.330 に答える
0

古いバージョンの .NET (私は 1.1 プロジェクトに機能を追加していますが、残念です) では、既定のメソッドGetFields()は空の配列を返します。1.1 以降、すべてのパブリック プロパティを含めるようにこのメソッドを更新しました。GetProperties()同じことを行うメソッドが既にあるため、なぜこの変更を行ったのかわかりません。

この方法はプライベート フィールドに到達するための方法であるため、その使用方法に関する知識が重要です。メソッドGetFields(BindingFlags flags)のオーバーロードがあります。これは、BindingFlagsの組み合わせを使用して、オブジェクトから必要なフィールドを決定します。

したがって、インスタンスのプライベート フィールドが必要な場合は、次のように呼び出します。

GetFields(BindingFlags.Instance | BindingFlags.NonPublic);

public static プロパティのみが必要な場合は、次のように呼び出します。

GetFields(BindingFlags.Static | BindingFlags.Public);

すべての静的フィールドに対して引き続きそれらを結合することもできます。

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

他にも多くの種類のBindingFlags.

于 2014-07-15T14:08:35.660 に答える