如何将列表传递给construtor?
它显示一条消息:
错误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";
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 13
一般来说问题不是传递List<string>给构造函数- 问题是你试图将它用于属性.你基本上不能这样做,因为它不是编译时常量.
看起来它ProgramList实际上是一个枚举 - 所以你可能想把它变成枚举:
[Flags]
public enum ProgramLists
{
SurveyInput,
SurveyOutput,
...
}
Run Code Online (Sandbox Code Playgroud)
然后使你的CustomAuthorizeAttribute(应该这样命名,后缀为Attribute)ProgramLists在构造函数中接受a .您将其指定为:
[CustomAuthorize(ProgramLists.SurveyInput | ProgramLists.SurveyOutput)]
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用单独的方法将每个ProgramLists元素映射到字符串,例如"A001".这可以通过将属性应用于每个元素,或者可能具有Dictionary<ProgramLists, string>某个元素来完成.
如果你真的想继续使用这样的字符串,你可以CustomAuthorizeAttribute接受一个以逗号分隔的列表,或者使它成为一个数组而不是一个列表并使用一个参数数组:
[AttributeUsage(AttributeTargets.Method)]
public class FooAttribute : Attribute
{
public FooAttribute(params string[] values)
{
...
}
}
[Foo("a", "b")]
static void SomeMethod()
{
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您不能使用List <T>.
属性对参数和属性类型有限制,因为它们必须在编译时可用.在C#中使用属性
改为使用数组:
//constructor
public CustomAuthorize(string[] _multipleProgramID)
{
...
}
// usage
[CustomAuthorize(new string[] { ProgramList.SURVEY_INPUT, ProgramList.SURVEY_OUTPUT })]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6551 次 |
| 最近记录: |