编程语言
首页 > 编程语言> > c#-属性中的结构参数

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