web-dev-qa-db-ja.com

BindingFlags.IgnoreCaseがType.GetProperty()で機能しませんか?

以下を想像してください

タイプTにはフィールドCompanyがあります。次のメソッドを実行すると、完全に機能します。

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

次の呼び出しではnullになりますが

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

誰かがアイデアを思いつきましたか?

158
Boris Callens

デフォルトのルックアップフラグを上書きしました。新しいフラグを指定する場合は、プロパティが見つかるようにすべての情報を提供する必要があります。例えば: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

347
Pop Catalin

BindingFlags.Public | BindingFlags.Instanceを追加する必要があります

28
leppie

おかげで、これは今日私をピンチで助けてくれました。監査情報を保存しましたが、プロパティ名の大文字と小文字が正しくありません。 (監査はデータレイヤーに組み込まれています。)とにかく、IgnoreCaseをバインディングフラグとして追加する必要がありましたが、同僚がこの答えを見つけるまでは機能しませんでした。結果の関数:

public static void SetProperty(Object R, string propertyName, object value)
{
    Type type = R.GetType();
    object result;
    result = type.InvokeMember(
        propertyName, 
        BindingFlags.SetProperty | 
        BindingFlags.IgnoreCase | 
        BindingFlags.Public | 
        BindingFlags.Instance, 
        null, 
        R, 
        new object[] { value });
}

これは、私がDotMagicと呼ぶクラスの一部です。

9