2012-05-02 17 views
2

アクセサの内部からプロパティの一意の識別子を取得することは可能ですか?アクセサ内でプロパティの一意の識別子を取得する方法

class Foo 
{ 
    int Bar 
    { 
     set 
     { 
      string nameOfThisProperty = X; // where X == "Bar" or any unique value 
     } 
    } 
} 

もしそうなら、どうすればよいですか?

更新

私が求めている理由は、私はいくつかのコードは、私が今やっているとして自分自身を1を宣言することを避けるために実行されているプロパティを識別し、いくつかの一貫性のあるユニークな値が欲しいですセッターをb可能性がコメント欄で指摘したよう

[MethodImpl(MethodImplOptions.NoInlining)] 
set 
{ 
    string name = MethodBase.GetCurrentMethod().Name; 
    // TODO: strip the set_ prefix from the name 
} 

:あなたはリフレクションを使用することができ

Dictionary<string, RelayCommand> _relayCommands 
    = new Dictionary<string, RelayCommand>(); 

public ICommand SomeCmd 
{ 
    get 
    { 
     string commandName = "SomeCmd"; 
     RelayCommand command; 
     if (_relayCommands.TryGetValue(commandName, out command)) 
      return command; 
     ... 
+0

可能複製(http://stackoverflow.com/questions/1206023/how-to-get-current-property-name [反射を経て、現在のプロパティ名を取得する方法?] -via-reflection) – empi

+0

これを実現する方法はたくさんあります。最高のものはあなたがそれを必要とする理由によって決まります。 INotifyPropertyChangedを実装するには? –

+0

@Adriano:私は尋ねる理由を更新しました。 –

答えて

2

eインライン化されているため、JITerがそうしないように、[MethodImpl]属性で修飾する必要があります。

また、名前がset_Barと等しいため、メソッド名から接頭辞set_を削除する必要があります。だから、

:の

string name = MethodBase.GetCurrentMethod().Name.Substring(4); 
+0

メソッドはインライン化されます(またはインライン化できます)。彼はそれを非インラインであるとマークするべきです。 –

+0

@Adriano:あなたは詳しく説明できますか? –

+2

@sixfeetsixプロパティセッターが(ほとんどの場合そうであるように)シンプルであれば、JITコンパイラーによってインライン展開されます。この場合、現在のメソッドの名前はset_propertyNameではなく、呼び出し元の名前です。メソッドに[MethodImpl(MethodImplOptions.NoInlining)] –

関連する問題