7
는 다음 사항을 고려하십시오 :반환 값에 적용된 특성을 어떻게 반영합니까?
당신이 NotNullAttribute 속성은 메서드의 반환 값에 적용되는지 볼 것이다 어떻게하는 System.Reflection을 사용하여,[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue)]
public class NotNullAttribute : Attribute
{
}
public class Class1
{
[return: NotNull]
public static string TestMethod([NotNull] string arg)
{
return arg + " + " + arg;
}
}
? 할 수 없다면 [return :] 문법의 목적은 무엇입니까?
가. 당신의 대답은 PostSharp가 MethodBase를 사용하고 있다는 것을 깨닫게했기 때문에 그것이 사용 가능하지 않은 이유입니다. 감사. – Amy
BTW, 어셈블리를 읽기 전용 컨텍스트로로드하는 경우 (위의 단순화 된 테스트 케이스에도 불구하고 그렇다)이 솔루션은 실제로 작동하지 않습니다. 대신에, 다음을 사용해야합니다 : CustomAttributeData.GetCustomAttribute (methodInfo.ReturnParameter) –
'mi.ReturnParameter.GetCustomAttributes' 등이 있습니다. @Amy,'MethodBase'에서 사용할 수없는 이유는 그 생성자가 허용하지 않는 것 같습니다 "비 생성자 메서드"는 C# 메서드, 속성/인덱서 / 이벤트의 C# 접근 자, C# 연산자입니다. 'void'를 리턴하는 메소드는 리턴 값에 커스텀 속성을 가질 수 있습니다! –