gpt4 book ai didi

c# - 自定义属性 - 为枚举获取 "not a valid named attribute argument"

转载 作者:行者123 更新时间:2023-12-02 08:51:08 25 4
gpt4 key购买 nike

当我尝试使用如下所示的 MultiselectComperer 值时,为什么会收到此消息:

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

这是自定义属性的代码...所有 emun 都是公共(public)的...但我收到此消息:

'MultiselectComperer' is not a valid named attribute argument because it is not a valid attribute parameter type ....

[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 属性可为 null。编译器会提示,因为不幸的是您无法创建可为空类型的常量。如果您将其设置为不可为空,您的类将正常工作。

如果您需要向 eMultiselectComperer 表示第三个值,除了 OrAnd 之外的枚举,您可以创建第三个枚举值,如下所示该枚举的默认值,如下所示:

[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 (或任何您喜欢调用的值)它)。

关于c# - 自定义属性 - 为枚举获取 "not a valid named attribute argument",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792515/

25 4 0