Имя в атрибуте
Принимая во внимание 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 ответа
Решение
Хорошо, что там поддерживается, не так ли? Так что нет, это не странно.
Документация упоминает Attribute
пример в качестве ключевого варианта использования:
[DebuggerDisplay("={" + nameof(GetString) + "()}")]
class C {
string GetString() { }
}
Если вы считаете, nameof(...)
как синтаксический сахар, тогда это не странно - ваш атрибут принимает строку, а компилятор обрабатывает эту строку во время компиляции (принимая во внимание любые переименования в результате рефакторинга)