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

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

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

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

Ответ 1

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

Из спецификации С# 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 может быть разрешено к одному из следующих:
    • постоянное значение.
    • Объект System.Type.
    • Одномерный массив атрибут-аргументов-выражений.