属性中的名称

nameof in attribute

考虑到 Myatt 属性和 MyObj class,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))] 

我明白了。谢谢。

如果您将 nameof(...) 视为语法糖,那么这并不奇怪 - 您的属性采用一个字符串,并且编译器在编译时计算出该字符串(考虑到重构导致的任何重命名)

很高兴它在那里得到支持,不是吗?所以不,这并不奇怪。

Documentation 提到一个 Attribute 示例作为关键用例:

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