2010-08-09 142 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 2010-10-08 18:24:13

+1

@kbrimington:感谢您的更新!听起来就像我们必须等待解决方案发布之前...哦,这不是关键:) – mpen 2010-10-09 02:36:16

+0

对象名称= null也给出了这个错误。 – ghord 2012-01-23 13:43:24

回答

9

我打电话给'bug'。

我希望你不介意,我向微软报告了这个错误。

UPDATE:

我今天收到来自微软的下列反馈,加上强调。

感谢您报告使用Visual Studio遇到的这个问题 !

我们修复了我们代码中属性的可选字符串 参数。 VS后,您会看到此修复程序在 的Visual Studio 2010年版

亚历克斯·特纳

项目经理

Visual Basic和C#编译器

+0

不要介意。尽管我遵循该链接,但我获得了404。它要求我登录,然后说没有找到该页面。 – mpen 2010-08-10 01:02:46

+0

@Mark:奇怪。我只是试了一下,它工作得很好。也许这是一个权限的事情。我会及时向大家发布。我确实收到了一封自动确认信,表明它正在发送给适当的团队。我们将看到会发生什么。 – kbrimington 2010-08-10 01:11:17

+0

它确实提到了权限 - “您请求的内容无法找到,或者您没有权限查看它。”所以可能就是这样。 – mpen 2010-08-10 02:06:51

1

属性已经提供了默认的参数。您只需在属性上创建公共属性,然后可以在属性实例化过程中分配这些属性。它已经有效,它已经很好理解,并且与框架属性的工作方式一致。所以......为什么不使用这种机制而不是试图向构造函数冗余添加默认参数呢?

+1

这不是问题:)但“为什么”的原因是因为C#4添加了命名参数。有了Attributes,看起来我们现在有两种定义命名参数的方法,除了我们没有,因为这个方法产生了一个错误;我试图通过坚持一种方法来保持应用程序的一致性。尽管如此,我并不是说添加默认参数是一个好主意,我只是想知道为什么我们不能。 – mpen 2010-08-10 01:01:33

+0

这可能是一个错误,但我不认为这很重要,因为现在已经有更好的方法去做了。对不起,C#不完全正交。 – siride 2010-08-10 06:23:22

+1

对我来说这绝对是一个错误。您可以使用属性的定义来编译代码,但是无论使用它的代码都无法编译。 – user276648 2011-09-15 05:58:00