Ответ 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.
- Одномерный массив атрибут-аргументов-выражений.