Имя в атрибуте

Принимая во внимание 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(...) как синтаксический сахар, тогда это не странно - ваш атрибут принимает строку, а компилятор обрабатывает эту строку во время компиляции (принимая во внимание любые переименования в результате рефакторинга)

Другие вопросы по тегам