15
 Type t = typeof(T);
  t.GetProperty("Company")

以下のコードを書くと、nullが返されます

    Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)

その間、私がこれを書いていればうまくいきます.なぜそうなのですか?

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase|BindingFlags.Public | BindingFlags.Instance)
4

3 に答える 3

24

効果的にとらないオーバーロードは、BindingFlagsデフォルトでBindingFlags.Public | BindingFlags.Static | BindingFlags.Instance. そのため、最初のスニペットでそれが見つかります。

a を指定する場合は、関連するすべてBindingFlagsのフラグを指定する必要があります。これには、パブリック メンバーを表示するかどうか、非パブリック メンバーを表示するかどうか、インスタンス メンバーを表示するかどうか、インスタンス メンバーを表示するかどうかを示すフラグが含まれます。静的メンバーを表示します。

を指定しただけBindingFlags.IgnoreCaseでは、それらのどれも見たいと言っていないので、何も見つかりません。

于 2013-02-18T06:59:05.120 に答える
7

設計上、 Type.GetPropertyでは、少なくとも Static または Instance を指定する必要があります。

•戻り値を取得するには、BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。

于 2013-02-18T06:59:06.800 に答える
5

GetProperty(string name) 指定された名前( MSDNによる)のパブリック プロパティを検索しますが、指定されたバインド制約を指定どおりに使用して、指定されたプロパティを検索します。GetProperty(string, BindingFlags)

あなたが言うときBindingFlags.IgnoreCase、それはそれを適用するだけでBindingFlag、他には何もありません。docsによると、返品を受け取るには または のいずれBindingFlags.Instanceかを指定する必要がありますBindingFlags.Static

于 2013-02-18T07:02:02.913 に答える