属性构造函数的默认值?

时间:2010-08-09 01:35:39

标签: c# attributes

我收到了这个错误,

  

错误CS0182:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

当我尝试写这样的东西时

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

它甚至没有显示行号,但当我取出=null位时它会消失。

实际上,当我提供默认值并且依赖它(即我省略它)时,错误只发生两者

    [Url("/index")]

我很想知道为什么会这样? “null”如何不是常量表达式?

2 个答案:

答案 0 :(得分:9)

我称之为'bug'。

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

<强> 更新:

我今天收到了微软的以下反馈意见,重点补充说。

  

感谢您报告此问题   遇到Visual Studio!

     

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

     

Alex Turner

     

项目经理

     

Visual Basic和C#编译器

答案 1 :(得分:1)

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