2010-08-09 5 views
10

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

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

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

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

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

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

[Url("/index")] 

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

+1

Я получил обратную связь от Microsoft и соответствующим образом обновил свой ответ. – kbrimington

+1

@kbrimington: Спасибо за обновление! Похоже, нам придется подождать до того, как будет выпущено исправление ... ну, это вряд ли важно :) – mpen

+0

имя объекта = null также дает эту ошибку. – ghord

ответ

9

Я называю «ошибкой».

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

UPDATE:

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

Благодарим за сообщение об этой проблеме. встречается с Visual Studio!

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

Alex Turner

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

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

+0

Не против вообще. Я получаю 404, когда я следую этой ссылке. Он попросил меня войти в систему, а затем сказал, что страница не найдена. – mpen

+0

@Mark: Странно. Я просто попробовал, и все получилось просто отлично.Возможно, это вопрос с разрешениями. Я буду держать вас в курсе. Я получил автоматическое письмо с подтверждением о том, что оно направляется в нужную команду. Посмотрим, что произойдет. – kbrimington

+0

Он упоминал разрешения - «Запрошенный вами контент не может быть найден или у вас нет разрешения на его просмотр». Так может и быть. – mpen

1

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

+1

Это не вопрос :) Но причина «почему» заключается в том, что C# 4 добавил именованные параметры. С Атрибутами, казалось бы, теперь у нас есть * два * способа определения именованных параметров, за исключением того, что мы этого не делаем, потому что это вызывает ошибку; Я пытался придерживаться приложения, придерживаясь одного метода. Тем не менее, я не говорю, что это хорошая идея добавить аргументы по умолчанию, мне просто интересно, почему мы не можем. – mpen

+0

Это может быть ошибка, но я не думаю, что это важно, потому что уже есть лучший способ сделать это. Извините, что C# не полностью ортогонален. – siride

+1

Для меня это определенно ошибка. Вы можете скомпилировать код с определением атрибута, но любой код, который его использует, не может скомпилировать. – user276648

Смежные вопросы