Аргумент атрибута должен быть константным выражением - PullRequest
26 голосов
/ 04 мая 2010

Есть ли обходной путь для следующей проблемы?

Аргументом атрибута должно быть константное выражение

Я хочу использовать десятичные дроби в параметре атрибута.

1 Ответ

33 голосов
/ 04 мая 2010

К сожалению, вы не можете использовать десятичные знаки в значениях атрибутов, так как сам CLR на самом деле не знает о типе System.Decimal - это не примитивный тип, такой как int, double и т. Д. Компилятор C # в основном подделывает его для константных полей введите десятичное число, но оно не может достичь того же эффекта с атрибутами.

Из спецификации C # 3, раздел 17.1.3:

Типы позиционных и именованных параметры для класса атрибута ограничено параметром атрибута типы, которые:

  • Один из следующих типы: bool, byte, char, double, float, int, long, sbyte, short, Строка, Uint, Ulong, Ushort.
  • Тип объекта.
  • Тип System.Type.
  • перечисление тип, при условии, что он имеет публичный доступность и типы, в которых он вложенный (если есть) и есть публичный доступность (§17.2).
  • одномерные массивы вышеупомянутых типы.

Затем в разделе 17.2:

Выражение E является выражением атрибут-аргумент, если все следующие операторы> true:

  • Тип E является атрибутом тип параметра (§17.1.3).
  • В время компиляции, значение E может быть решено к одному из следующих:
    • A постоянное значение.
    • Объект System.Type.
    • Одномерный массив атрибут-аргументов-выражений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...