属性中的名称
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() { }
}
考虑到 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() { }
}