属性中的名称



考虑到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))] 

我现在明白了。谢谢。

那里支持它很好,不是吗?所以不,这并不奇怪。

文档提到了一个Attribute示例作为关键用例:

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

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

相关内容

  • 没有找到相关文章

最新更新