2009-11-03 4 views
7

可能性の重複:
c# - How do you get a variable’s name as it was physically typed in its declaration?どのようにC#のプロパティ名をリフレクション付きの文字列として取得しますか?

私は「強く型付けされた」魔法の文字列を持つことができますので、文字列としてプロパティ名を取得する方法を探しています。私がする必要があるのは、 "SomeProperty"を返すMyClass.SomeProperty.GetName()のようなものです。これはC#で可能ですか?

答えて

6

表現を使用すると、これを簡単に実行できます。このblog for a sampleを参照してください。

これにより、ラムダを介して式を作成し、その名前を引き出すことができます。

string propertyName = Reflect.GetProperty(() => SomeProperty).Name; 

ヴィオラ:参照「を反映」クラスを使用して、あなたの同等をマッピングするために

public int MyProperty { 
    get { return myProperty; } 
    set 
    { 
     myProperty = value; 
     RaisePropertyChanged(() => MyProperty); 
    } 
} 

、あなたのような何かをしたい:例えば、実装INotifyPropertyChangedのは、のような何かを再加工することができます - マジック文字列のないプロパティ名

+0

ここでの構文はちょっと面倒ですが、私が必要としていることをします。ありがとう! –

1

リフレクションを使用してオブジェクトのプロパティのリストを取得できます。

MyClass o; 

PropertyInfo[] properties = o.GetType().GetProperties(
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance 
); 

各プロパティは、あなたに "SomeProperty" を得るでしょうName属性を持つ

8

このアプローチは、あなたがそれを呼び出すことができます今すぐExpression

public static string GetName<T>(this T item) where T : class 
{ 
    if (item == null) 
     return string.Empty; 

    return typeof(T).GetProperties()[0].Name; 
} 

を使用するより方法は速くなります。

new { MyClass.SomeProperty }.GetName(); 

さらにパフォーマンスが必要な場合は、値をキャッシュできます。この重複した質問を参照してくださいHow do you get a variable's name as it was physically typed in its declaration?

+0

ベストアンサーはこちら私はプロパティをループしたくないので、実際のプロパティに基づいてプロパティ名を取得したい。名前の最初の(唯一の)プロパティを持つ匿名の型を使用する場合は、名前をgeniusにします。 – Paul

+0

@Paul私はそれの背後にある天才ではありません。第二に、それはあまりリファクタリングではありません。つまり、プロパティの名前を変更すると、匿名型は元の名前を保持します。この場合、 'SomeProperty'を' SomeProperty1'に変更すると、匿名クラスが 'SomeProperty = SomeProperty1''に変更され、更新された名前" SomeProperty1 "ではなく" SomeProperty "が出力されます。私はその答えに言及します。 – nawfal

+0

ダーン。私はプロパティ名を変更することは予期していませんが、これまでに行ったことがあれば、リファクタリングでそれを処理することを望みます。知らせてくれてありがとうございます。 – Paul

関連する問題