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

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

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

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

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

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

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

    [Url("/index")]

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

11
задан Mike Nakis 29 May 2013 в 14:21
поделиться

2 ответа

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

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

ОБНОВЛЕНИЕ:

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

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

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

Алекс Тернер

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

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

9
ответ дан 3 December 2019 в 10:02
поделиться

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

.
1
ответ дан 3 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: