gpt4 book ai didi

c# - 如何在 C# 中使用 List 传递属性参数类型?

转载 作者:太空狗 更新时间:2023-10-29 19:53:42 29 4
gpt4 key购买 nike

如何将列表传递给构造函数?

它显示一条消息:

错误14 属性参数必须是属性参数类型的常量表达式、typeof表达式或数组创建表达式

public class CustomAuthorize : AuthorizeAttribute {
private List<string> multipleProgramID;

//constructor
public CustomAuthorize(List<string> _multipleProgramID) {
multipleProgramID = _multipleProgramID;
}
}

[CustomAuthorize(new List<string>(new string[] { ProgramList.SURVEY_INPUT, ProgramList.SURVEY_OUTPUT } ))]
[HttpPost]
public ActionResult DeleteWaterQualityItems(string sourceID, string wqID) {
// ..other code...
}

public class ProgramList {
public const string SURVEY_INPUT = "A001";
public const string SURVEY_INPUT = "A002";
}

最佳答案

问题不在于传递 List<string>到构造函数一般 - 问题是您正试图将它用于属性。您基本上不能那样做,因为它不是编译时常量。

看起来像ProgramList实际上是一个枚举 - 所以你可能想把它变成一个枚举:

 [Flags]
public enum ProgramLists
{
SurveyInput,
SurveyOutput,
...
}

然后让你的CustomAuthorizeAttribute (应该这样命名,后缀为 Attribute )接受 ProgramLists在构造函数中。您可以将其指定为:

[CustomAuthorize(ProgramLists.SurveyInput | ProgramLists.SurveyOutput)]

然后您可以使用单独的方式映射每个 ProgramLists元素到字符串,例如 "A001" .这可以通过为每个元素应用一个属性来完成,或者可能有一个 Dictionary<ProgramLists, string>某处。

如果你真的想继续使用这样的字符串,你可以制作CustomAuthorizeAttribute接受单个逗号分隔的列表,或将其设为数组而不是列表并使用参数数组:

[AttributeUsage(AttributeTargets.Method)]
public class FooAttribute : Attribute
{
public FooAttribute(params string[] values)
{
...
}
}

[Foo("a", "b")]
static void SomeMethod()
{
}

关于c# - 如何在 C# 中使用 List<string> 传递属性参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26276232/

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