gpt4 book ai didi

c# - 属性错误: An attribute argument must be a constant expression, 属性参数类型的typeof表达式或数组创建表达式

转载 作者:行者123 更新时间:2023-11-30 14:16:21 34 4
gpt4 key购买 nike

我想将一些枚举列表传递到我的 Attribute 属性。但是您可以将 List 传递给 Attribute 的属性,这很好。所以我尝试将其转换为字符串表示形式并尝试执行如下操作:

[MyAtt(Someproperty = 
Enums.SecurityRight.A.ToString() + "&" + (Enums.SecurityRight.B.ToString() ))]

但是,这给出了错误:“属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式”

我知道你只能传递常量。但是我该如何逃避呢?有什么技巧吗?

谢谢。

最佳答案

如果我的 C# 编码不正确,请原谅我。我使用 VB。

您可以使用 const 值。

namespace Enums {
static class SecurityRight {
const String A = "A";
const String B = "B";
}
}

[MyAtt(StringProperty = Enums.SecurityRight.A + "&" + Enums.SecurityRight.B)]

如果属性接受与枚举相同的数据类型,则可以使用枚举

namespace Enums {
[Flags()]
enum int SecurityRight {
A = 1;
B = 2;
}
}

[MyAtt(IntegerProperty = Enums.SecurityRight.A | Enums.SecurityRight.B)]

编辑:更改上面的 IntegerProperty 以接收多个值。

属性是在编译时设置的,而不是在运行时设置的。通过使用 ToString,您将调用在运行时使用的代码。您必须使用常量值。

关于c# - 属性错误: An attribute argument must be a constant expression, 属性参数类型的typeof表达式或数组创建表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735475/

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