Атрибуты и именованные / дополнительные параметры конструктора не работают

У меня есть настраиваемый атрибут, определенный следующим образом:

  [AttributeUsage(AttributeTargets.Field)]
  public class EnumDisplayAttribute : Attribute
  {
    public string Description { get; private set; }
    public string Code { get; private set; }

    public EnumDisplayAttribute(string description = null, string code = null)
    {
      Description = description;
      Code = code;
    }
  }

Оба параметра конструктора являются необязательными.

При использовании этого атрибута в таком поле

  public enum TransactionType
  {
    [EnumDisplay(code: "B")] 
    Bill,
    [EnumDisplay(description: null, code: "C")]
    CashReceipt,
  }

я не вижу волнистых линий в редакторе кода, но вижу неопределенную ошибку без номера столбца в строке файла. Сообщение об ошибке:

ошибка CS0182: аргумент атрибута должен быть константным выражением, выражением typeof или выражением создания массива типа параметра атрибута

При нажатии на ошибку ничего не происходит. То есть вы не попадаете на сайт ошибки (очевидно, поскольку нет номера строки и столбца).

даже если я установил атрибут так:

[EnumDisplay("This is a Bill")] 

Компилятору это не нравится.

По сути, я вынужден предоставить оба параметра (названные или нет), чтобы использовать этот атрибут в качестве атрибута.

Конечно, если я использую этот атрибут как обычный класс, например:

var enumDisplayAttribute = new EnumDisplayAttribute();
enumDisplayAttribute = new EnumDisplayAttribute(description: "This is a Bill");
enumDisplayAttribute = new EnumDisplayAttribute(code: "B");
enumDisplayAttribute = new EnumDisplayAttribute(description: "This is a Bill", code: "B");
enumDisplayAttribute = new EnumDisplayAttribute("This is a Bill", "B");
enumDisplayAttribute = new EnumDisplayAttribute("This is a Bill");

Компилятор примет любой из вышеперечисленных «стилей».

Конечно, я что-то упускаю или у меня просто не работает мозг.

22
задан Mike Nakis 29 May 2013 в 12:39
поделиться