首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >属性和命名/可选构造函数参数不起作用

属性和命名/可选构造函数参数不起作用
EN

Stack Overflow用户
提问于 2011-11-19 06:13:15
回答 3查看 21.6K关注 0票数 22

我的自定义属性定义如下:

代码语言:javascript
复制
  [AttributeUsage(AttributeTargets.Field)]
  public class EnumDisplayAttribute : Attribute
  {
    public string Description { get; private set; }
    public string Code { get; private set; }

    public EnumDisplayAttribute(string description = null, string code = null)
    {
      Description = description;
      Code = code;
    }
  }

这两个构造函数参数都是可选的。

在如下所示的字段上使用此属性时

代码语言:javascript
复制
  public enum TransactionType
  {
    [EnumDisplay(code: "B")] 
    Bill,
    [EnumDisplay(description: null, code: "C")]
    CashReceipt,
  }

我在代码编辑器中看不到任何乱七八糟的东西,但我看到一个模糊的错误,没有任何文件行号的列。错误消息为:

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

单击该错误不会执行任何操作。也就是说,您不会导航到错误站点(显然,因为没有行号和列)。

即使我这样设置属性:

代码语言:javascript
复制
[EnumDisplay("This is a Bill")] 

编译器不喜欢它。

实际上,为了将此属性用作属性,我被迫提供两个参数(命名或未命名)。

当然,如果我将此属性用作常规类,如下所示:

代码语言:javascript
复制
var enumDisplayAttribute = new EnumDisplayAttribute();
enumDisplayAttribute = new EnumDisplayAttribute(description: "This is a Bill");
enumDisplayAttribute = new EnumDisplayAttribute(code: "B");
enumDisplayAttribute = new EnumDisplayAttribute(description: "This is a Bill", code: "B");
enumDisplayAttribute = new EnumDisplayAttribute("This is a Bill", "B");
enumDisplayAttribute = new EnumDisplayAttribute("This is a Bill");

编译器将接受上述任何一种“样式”。

当然,我漏掉了什么或者我的大脑不工作了。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8189807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档