自定义属性-获取“非有效的命名属性参数”;用于枚举

本文关键字:参数 属性 枚举 用于 获取 有效 自定义属性 | 更新日期: 2023-09-27 18:04:25

为什么当我尝试使用MultiselectComperer值时得到此消息:

[Display(ResourceType = typeof(OrdersManagementStrings), Name = "PrintSettings")]
[FilterAttribute(IsMultiselect = true, MultiselectComperer=FilterAttribute.eMultiselectComperer.Or)]
public ePrintSettings PrintSettings { get; set; }

下面是自定义属性的代码…所有的鸡蛋都是公开的。但是我得到了这个信息:

'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属性是可空的。编译器正在抱怨,因为不幸的是,您不能创建可空类型的常量。如果你让它不可为空,你的类就可以正常工作。

如果您需要表示eMultiselectCompererOrAnd以外的第三个值,您可以创建第三个枚举值作为该枚举的默认值,如下所示:

[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(或您喜欢的任何名称)。