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