CustomAttributeFormatException:指定自定义属性的二进制格式无效

bkm*_*mza 7 .net attributes params

我们发现了一些与属性相关的奇怪行为,我们只有一个问题:为什么?例.首先,我们在下一个签名中有一些属性:

public class Myc : Attribute
    {
        public Myc( bool b = false, params int[] a )
        {
            Console.WriteLine( "in ctor" );
        }

    }
Run Code Online (Sandbox Code Playgroud)

当我们尝试调用没有参数的构造函数时,下一个:

class Program
    {
        [Myc]
        static void Main( string[] args )
        {
            Console.ReadKey();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我们得到下一个异常: System.Reflection.CustomAttributeFormatException:指定自定义属性的二进制格式无效.

为什么会这样?

Jes*_*ett 7

不确定原因是什么; 在我自己的测试中,它似乎与在构造函数定义中具有一个或多个默认参数和"params"参数的组合有关.但是,如果它阻止了你,那就是一个懒惰的解决方法:

public class Myc : Attribute
{
    public Myc (params int[] a) : this(false) {}

    public Myc( bool b, params int[] a )
    {
        Console.WriteLine( "in ctor" );
    }
}
Run Code Online (Sandbox Code Playgroud)

具有非默认值和"params"参数的"params"参数似乎都很好.

不完全是解释,但是......