2014-02-14 4 views
0

매개 변수에 사용자 지정 특성이 연결되어 있는지 어떻게 결정합니까? 메서드의 특성에 액세스하는 방법 매개 변수

나는이 테스트 케이스가 통과 할 것이라고 생각 :

[TestCase("")] 
    public void TestParameterAttribute([NotRequired]string theString) 
    { 
     var result = false; 

     foreach (var attribute in theString.GetType().GetCustomAttributes(true)) 
     { 
      if (attribute.GetType() == (typeof(NotRequiredAttribute))) 
      { 
       result = true; 
      } 
     } 

     Assert.That(result, Is.True); 
    } 

답변

1

그것은 조금 더 많은 작업이 필요합니다.

[TestCase("")] 
public void TestParameterAttribute([NotRequired]string theString) 
{ 
    var method = MethodInfo.GetCurrentMethod(); 
    var parameter = method.GetParameters()[0]; 
    var result = false; 

    foreach (var attribute in parameter.GetCustomAttributes(true)) 
    { 
     if (attribute.GetType() == (typeof(NotRequiredAttribute))) 
     { 
      result = true; 
     } 
    } 

    Assert.That(result, Is.True); 
} 
1

theString.GetType()string를 나타내는 Type 참조를 얻는다. GetCustomAttributes을 호출하면 해당 속성에 대해 string 클래스가 검색됩니다.

원하는 작업은 현재 메소드의 매개 변수에 대한 속성을 가져옵니다. 이 같은 아마 뭔가 :

var result = false; 

foreach (var parameter in MethodInfo.GetCurrentMethod().GetParameters()) 
{ 
    if (parameter.GetCustomAttributes().Any(x => x.GetType() == typeof (NotRequiredAttribute))) 
     result = true; 
} 
1

은 또한 당신이 GetCustomAttribute 방법의 일반 버전을 사용할 수 있습니다 :

parameter.GetCustomAttribute<NotRequiredAttribute>() != null 
+0

아 덕분 사람, 즉 쿨입니다. –

관련 문제