当我尝试使用MultiselectComperer
这样的值时,为什么会收到此消息:
[Display(ResourceType = typeof(OrdersManagementStrings), Name = "PrintSettings")]
[FilterAttribute(IsMultiselect = true, MultiselectComperer=FilterAttribute.eMultiselectComperer.Or)]
public ePrintSettings PrintSettings { get; set; }
以下是自定义属性的代码...所有emuns都是公开的...但是我收到此消息:
'MultiselectComperer'不是有效的命名属性参数,因为 它不是有效的属性参数 打字....
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
public sealed class FilterAttribute : Attribute
{
public enum eMultiselectComperer
{
Or,
And
}
public bool IsMultiselect { get; set; }
public eMultiselectComperer? MultiselectComperer { get; set; }
}
答案 0 :(得分:8)
问题是MultiselectComperer
属性可以为空。编译器抱怨,因为不幸的是你无法使可空类型的常量。如果你让它不可空,你的班级就可以正常工作。
如果您需要向eMultiselectComperer
表示第三个值,除Or
和And
以外的枚举,您可以创建第三个枚举值作为该枚举的默认值,如下:
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
public sealed class FilterAttribute : Attribute
{
public enum eMultiselectComperer
{
Unspecified = 0,
Or,
And
}
public bool IsMultiselect { get; set; }
public eMultiselectComperer MultiselectComperer { get; set; }
}
这样,如果用户在声明属性时没有为MultiselectComperer
属性指定值,则默认为Unspecified
(或者您喜欢称之为的任何内容)。