2016-03-31 9 views
8

getter/setterで現在のプロパティの名前を取得する方法はありますか?このようなgetter/setterのnameof()現在のプロパティ

何か:

public string MyProperty 
{ 
    get { return base.Get<string>(nameof(ThisProperty)); } 
    set { base.Set<string>(nameof(ThisProperty), value); } 
} 

(ThisPropertyは "MYPROPERTY" を返します)。

ありがとうございます!

+1

'nameof(MyProperty)'はうまくいくはずですか? – MarcinJuraszek

+5

どうしてですか? 'nameof(MyProperty)'の記述に伴う問題は何ですか? –

+0

これは 'MyProperty'という名前が変更される可能性がある場合に便利です:Visual Studio IDEがこの問題を捉えるべきですが、' nameof(whatever) 'を更新することを忘れないでください。 – levelonehuman

答えて

17

これは、nameofで行うことはできませんが、さらに良い方法があります(C#5以降で利用可能です)。あなたは、オプションのpropertyNameパラメータを作成し、それにCallerMemberName属性を適用することができます。

protected void Set<T>(T value, [CallerMemberName] string propertyName = null) 
{ 
    ... 
} 

protected T Get<T>([CallerMemberName] string propertyName = null) 
{ 
    ... 
} 

あなたはpropertyNameの引数を省略した場合さて、現在のメンバー名が暗黙のうちに渡されます。

public string MyProperty 
{ 
    get { return base.Get<string>(); } // same as calling Get<string>("MyProperty") 
    set { base.Set<string>(value); } // same as calling Set<string>(value, "MyProperty") 
} 
+0

これは素晴らしい答え!ありがとうございます! – Smartis

+0

ありがとうございました! – evaenrique

+0

私はあなたの最初の文とは違うことを願います。 C#6以降、 'nameof'は実際に仕事をします:' public string MyProperty { get {return base.Get (nameof(MyProperty)); } セット{base.Set (nameof(MyProperty)、value); } } ' – takrl

-3

代替にありますGetとSetは基本的にメソッドなので、MethodBase各名前がget_メソッドとSET_

これは結果としてMYPROPERTYを返すが付いているので

public string MyProperty 
{ 
    get 
    { 
     return MethodBase.GetCurrentMethod().Name.Substring(4); 
    }    
} 

サブストリングがあります。

関連する問題