我的自定义属性定义如下:
[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;
}
}
这两个构造函数参数都是可选的。
在如下所示的字段上使用此属性时
public enum TransactionType
{
[EnumDisplay(code: "B")]
Bill,
[EnumDisplay(description: null, code: "C")]
CashReceipt,
}
我在代码编辑器中看不到任何乱七八糟的东西,但我看到一个模糊的错误,没有任何文件行号的列。错误消息为:
错误表达式:属性参数必须是属性参数类型的常量表达式、typeof表达式或数组创建表达式
单击该错误不会执行任何操作。也就是说,您不会导航到错误站点(显然,因为没有行号和列)。
即使我这样设置属性:
[EnumDisplay("This is a Bill")]
编译器不喜欢它。
实际上,为了将此属性用作属性,我被迫提供两个参数(命名或未命名)。
当然,如果我将此属性用作常规类,如下所示:
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");
编译器将接受上述任何一种“样式”。
当然,我漏掉了什么或者我的大脑不工作了。
https://stackoverflow.com/questions/8189807
复制相似问题