属性构造函数的默认值?
我得到这个错误,属性构造函数的默认值?
错误CS0182:属性参数必须是常量表达式的typeof属性参数类型
的表达或数组创建表达式当我尝试写一些东西这样
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class UrlAttribute : Attribute
{
public UrlAttribute(string pattern, string name=null)
{
// ...
,它甚至没有显示行数,但是当我拿那=null
位消失。
其实,错误只发生都当我提供一个默认值和依靠它(即我忽略它)像这样
[Url("/index")]
我很好奇,想知道为什么吗? “null”如何不是一个常量表达式?
我打电话给'bug'。
我希望你不介意,我向微软报告了这个错误。
UPDATE:
我今天收到来自微软的下列反馈,加上强调。
感谢您报告使用Visual Studio遇到的这个问题 !
我们修复了我们代码中属性的可选字符串 参数。 VS后,您会看到此修复程序在 的Visual Studio 2010年版
亚历克斯·特纳
项目经理
Visual Basic和C#编译器
不要介意。尽管我遵循该链接,但我获得了404。它要求我登录,然后说没有找到该页面。 – mpen 2010-08-10 01:02:46
@Mark:奇怪。我只是试了一下,它工作得很好。也许这是一个权限的事情。我会及时向大家发布。我确实收到了一封自动确认信,表明它正在发送给适当的团队。我们将看到会发生什么。 – kbrimington 2010-08-10 01:11:17
它确实提到了权限 - “您请求的内容无法找到,或者您没有权限查看它。”所以可能就是这样。 – mpen 2010-08-10 02:06:51
属性已经提供了默认的参数。您只需在属性上创建公共属性,然后可以在属性实例化过程中分配这些属性。它已经有效,它已经很好理解,并且与框架属性的工作方式一致。所以......为什么不使用这种机制而不是试图向构造函数冗余添加默认参数呢?
这不是问题:)但“为什么”的原因是因为C#4添加了命名参数。有了Attributes,看起来我们现在有两种定义命名参数的方法,除了我们没有,因为这个方法产生了一个错误;我试图通过坚持一种方法来保持应用程序的一致性。尽管如此,我并不是说添加默认参数是一个好主意,我只是想知道为什么我们不能。 – mpen 2010-08-10 01:01:33
这可能是一个错误,但我不认为这很重要,因为现在已经有更好的方法去做了。对不起,C#不完全正交。 – siride 2010-08-10 06:23:22
对我来说这绝对是一个错误。您可以使用属性的定义来编译代码,但是无论使用它的代码都无法编译。 – user276648 2011-09-15 05:58:00
我收到了来自Microsoft的反馈,并相应地更新了我的回复。 – kbrimington 2010-10-08 18:24:13
@kbrimington:感谢您的更新!听起来就像我们必须等待解决方案发布之前...哦,这不是关键:) – mpen 2010-10-09 02:36:16
对象名称= null也给出了这个错误。 – ghord 2012-01-23 13:43:24