2017-05-08 1 views
-1

Myatt属性とMyObjクラスを考慮すると、ObjName属性がMyatt属性の範囲内にあるとは何とか不思議です。ではない?属性内の名前

[AttributeUsage(AttributeTargets.Property)] 
public class MyAtt : Attribute 
{ 
    public MyAtt(string name) 
    { 
     this.Name = name; 
    } 

    public string Name 
    { 
     get; set; 
    } 
} 

public class MyObj 
{ 
    [MyAtt(nameof(ObjName))] //Can access to ObjName?! 
    public int ObjID 
    { 
     get; 
     set; 
    } 

    public string ObjName 
    { 
     get; 
     set; 
    } 
} 

更新:最初のケースでは不可能であり、第二が可能である理由

申し訳ありませんが、私は思ったんだけど。

1. [MyAtt(nameof(this.ObjName))] 
2. [MyAtt(nameof(ObjName))] 

今すぐ取得します。ありがとう。

+2

あなたの質問は何ですか?あなたのコードがうまく動作しないことがわかったら? –

答えて

1

にですそれはそこでサポートされているのがいいですね。そうではありません、それは奇妙ではありません。

Documentationは、キーユースケースとしてAttribute例を挙げ:

[DebuggerDisplay("={" + nameof(GetString) + "()}")] 
class C { 
    string GetString() { } 
} 
0

あなたはシンタックスシュガーとしてnameof(...)を考えると、それは不思議ではないのです - (リファクタリングの結果として口座に任意の名前の変更を取って)あなたの属性は、文字列を受け取り、コンパイラはコンパイル時に、その文字列をうまくいく

関連する問題