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