繁体   English   中英

自定义属性 - 为枚举获取“不是有效的命名属性参数”

[英]Custom Attribute - getting “not a valid named attribute argument” for an enum

当我尝试使用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; }
}

问题是MultiselectComperer属性可以为空。 编译器抱怨,因为不幸的是你无法使可空类型的常量。 如果你让它不可空,你的班级就可以正常工作。

如果你需要向eMultiselectComperer表示第三个值,除了OrAnd之外的枚举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 (或者您更喜欢调用它)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM