답변:
속성은 배열을 사용합니다. 속성을 제어하는 경우 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 { }
할 수 있지만 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
에서는 작동하지 않습니다 (첫 번째 또는 마지막 승리 중 어느 것이 든 기억할 수 없습니다).
괜찮습니다. 사양, 섹션 17.2에서 :
다음 명령문이 모두 참인 경우 표현식 E는 attribute-argument-expression 입니다.
예를 들면 다음과 같습니다.
using System;
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class SampleAttribute : Attribute
{
public SampleAttribute(int[] foo)
{
}
}
[Sample(new int[]{1, 3, 5})]
class Test
{
}
예,하지만 전달하려는 배열을 초기화해야합니다. 다음은 다양한 수의 명령 줄 옵션을 테스트하는 단위 테스트의 행 테스트 예제입니다.
[Row( new[] { "-l", "/port:13102", "-lfsw" } )]
public void MyTest( string[] args ) { //... }