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:指定自定义属性的二进制格式无效.
为什么会这样?
不确定原因是什么; 在我自己的测试中,它似乎与在构造函数定义中具有一个或多个默认参数和"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"参数似乎都很好.
不完全是解释,但是......