Подтвердить что ты не робот

Значение по умолчанию для конструктора атрибутов?

Я получаю эту ошибку,

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

Когда я пытаюсь написать что-то вроде этого

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class UrlAttribute : Attribute
{
    public UrlAttribute(string pattern, string name=null)
    {
        // ...

Он даже не показывает номер строки, но он исчезает, когда я вынимаю этот бит =null.

Собственно, ошибка возникает только тогда, когда я предоставляю значение по умолчанию и полагаюсь на него (т.е. опускаю его) так

    [Url("/index")]

Мне любопытно узнать, почему это? Как "null" не является постоянным выражением?

4b9b3361

Ответ 1

Я вызываю "ошибку".

Надеюсь, вы не против, я сообщил об ошибке Microsoft.

UPDATE:

Сегодня я получил следующую обратную связь от Microsoft, добавлено выделение.

Спасибо за сообщение об этой проблеме столкнулись с Visual Studio!

Мы установили дополнительную строку параметры по атрибутам в нашем коде. Вы увидите это исправление в версии Visual Studio после VS 2010.

Алекс Тернер

Менеджер программ

Компилятор Visual Basic и С#

Ответ 2

Атрибуты уже предоставляют аргументы по умолчанию. Вы просто создаете общедоступные свойства в атрибуте, и их можно назначить в процессе создания атрибута. Он уже работает, он уже хорошо разбирается и согласуется с тем, как работают атрибуты структуры. Итак... почему бы просто не использовать этот механизм вместо того, чтобы пытаться избыточно добавлять параметры по умолчанию в конструктор?