Значение по умолчанию для конструктора атрибута? - PullRequest
11 голосов
/ 09 августа 2010

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

ошибка CS0182: аргумент атрибута должен быть выражением константы, выражением typeof или выражением создания массива типа параметра атрибута

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

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

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

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

    [Url("/index")]

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

Ответы [ 2 ]

9 голосов
/ 09 августа 2010

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

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

UPDATE:

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

Спасибо за сообщение об этой проблеме, которую вы столкнулся с Visual Studio!

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

Алекс Тернер

Диспетчер программ

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

1 голос
/ 09 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...