是否可以创建一个可以使用可变数量的参数进行初始化的属性?
例如:
[MyCustomAttribute(new int[3,4,5])] // this doesn't work
public MyClass ...
发布于 2008-11-06 20:51:14
属性将接受一个数组。但是如果你控制了这个属性,你也可以使用params
(这对消费者更好,IMO):
class MyCustomAttribute : Attribute {
public int[] Values { get; set; }
public MyCustomAttribute(params int[] values) {
this.Values = values;
}
}
[MyCustomAttribute(3, 4, 5)]
class MyClass { }
您创建数组的语法恰好是关闭的:
class MyCustomAttribute : Attribute {
public int[] Values { get; set; }
public MyCustomAttribute(int[] values) {
this.Values = values;
}
}
[MyCustomAttribute(new int[] { 3, 4, 5 })]
class MyClass { }
发布于 2008-11-06 21:50:22
您可以这样做,但它不符合CLS:
[assembly: CLSCompliant(true)]
class Foo : Attribute
{
public Foo(string[] vals) { }
}
[Foo(new string[] {"abc","def"})]
static void Bar() {}
显示:
Warning 1 Arrays as attribute arguments is not CLS-compliant
对于常规的反射用法,最好有多个属性,即
[Foo("abc"), Foo("def")]
但是,这不适用于TypeDescriptor
/PropertyDescriptor
,因为它只支持任何属性的单个实例(第一个或最后一个获胜,我记不清是哪一个)。
发布于 2008-11-06 20:49:50
尝试像这样声明构造函数:
public class MyCustomAttribute : Attribute
{
public MyCustomAttribute(params int[] t)
{
}
}
然后你可以像这样使用它:
[MyCustomAttribute(3, 4, 5)]
https://stackoverflow.com/questions/270187
复制相似问题