c#-属性中的结构参数
作者:互联网
我有以下示例代码:
public struct TestData
{
public readonly string Element;
public readonly bool MandatoryInd;
public TestData( string element, bool mandatoryInd )
{
Element = element;
MandatoryInd = mandatoryInd;
}
}
[AttributeUsage( AttributeTargets.Class, AllowMultiple = false )]
public class Test : Attribute
{
public TestData[] Values { get; set; }
public Test( params TestData[] values )
{
this.Values = values;
}
}
我想做的是这样的:
[Test( "3477", true, "3286", true, "3286", false )]
public class TestClass
{
}
基本上,我想在TestData()结构中捕获一对参数(字符串,布尔值),但是我不确定是否可以这样做.我尝试了以下操作,但是遇到编译错误“属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式”.
[Test( new TestData("3477", true), new TestData("3286", true), new TestData("3286", false) )]
public class TestClass
{
}
如果无法做到这一点,那么我将不得不考虑使用多个属性,这些属性目前已成功完成,但我想使用一种更简洁,更简洁的方法.
解决方法:
如果您更改构造函数的签名并使用linq技巧,则可以这样做:
public Test(params object[] values)
{
this.Values = values
.Select((x, idx) => new {x, idx})
.GroupBy(g => g.idx/2)
.Select(g => new TestData(g.First().x.ToString(), (bool) g.Last().x))
.ToArray();
}
但是确实不是类型安全的.
注意:您可能要使用MoreLINQ的Batch方法,这样您的代码看起来会更好.
标签:custom-attributes,c 来源: https://codeday.me/bug/20191121/2052779.html