Я получаю эту ошибку,
error CS0182: Аргумент атрибута должен быть константным выражением typeof выражение или создание массива выражение типа параметра атрибута
Когда я пытаюсь написать что-то вроде этого
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class UrlAttribute : Attribute
{
public UrlAttribute(string pattern, string name=null)
{
// ...
Оно даже не показывает номер строки, но исчезает, когда я вынимаю это = null
немного.
На самом деле ошибка возникает только и , когда я указываю значение по умолчанию и полагаюсь на него (т. Е. Я опускаю его) вот так
[Url("/index")]
Мне любопытно знать почему это? Как "null" не является постоянным выражением?
Я называю "ошибка".
Надеюсь, вы не против, я сообщил об ошибке в Microsoft.
ОБНОВЛЕНИЕ:
Сегодня я получил следующий отзыв от Microsoft, курсив мой.
Благодарим за сообщение об этой проблеме, которую вы столкнулся с Visual Studio!
Мы исправили необязательную строку параметры атрибутов в нашем коде. Вы увидите это исправление в версии Visual Studio после VS 2010.
Алекс Тернер
Менеджер программ
Visual Basic и компилятор C #
Атрибуты уже предоставляют аргументы по умолчанию. Вы просто создаете публичные свойства атрибута, и они могут быть назначены в процессе инстанцирования атрибута. Это уже работает, это уже хорошо понятно и соответствует тому, как работают атрибуты фреймворка. Так... почему бы просто не использовать этот механизм вместо того, чтобы пытаться излишне добавлять параметры по умолчанию в конструктор?
.