gpt4 book ai didi

c# - 属性和命名/可选构造函数参数不起作用

转载 作者:IT王子 更新时间:2023-10-29 04:30:17 25 4
gpt4 key购买 nike

我有这样定义的自定义属性:

  [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,
}

我在代码编辑器中没有看到任何波浪线,但我看到一个模糊的错误,没有任何列的文件行号。错误信息是:

error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

点击错误没有任何反应。也就是说,您不会导航到错误站点(很明显,因为没有行号和列)。

即使我这样设置属性:

[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");

编译器将接受上述任何一种“样式”。

当然,我遗漏了什么或者我的大脑不工作了。

最佳答案

在 C# 中已经存在属性的可选值之后,可选参数被添加到 C# 中。因此,对于可选的属性参数,您应该回退到特定于属性的语法:

[AttributeUsage(AttributeTargets.Field)]
public class EnumDisplayAttribute : Attribute
{
public string Description { get; set; }
public string Code { get; set; }

public EnumDisplayAttribute()
{
}
}

public enum TransactionType
{
[EnumDisplay(Code = "B")]
Bill,
[EnumDisplay(Description = null, Code = "C")]
CashReceipt,
}

如您所见,最终结果实际上是相同的,但您使用的不是命名参数,而是使用命名属性(其中语法如 [EnumDisplay(Description = null, Code = "C")] 只能在属性声明中使用)。

另一种思考方式是,属性声明“借用”了方法/构造函数调用的语法,但属性声明本身不是方法调用,因此它们不会完全相同特征作为方法。

关于c# - 属性和命名/可选构造函数参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com