2010-04-15 10 views
7

पर विचार निम्नलिखित:रिटर्न वैल्यू पर लागू एक विशेषता पर आप कैसे प्रतिबिंबित करते हैं?

[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue)] 
public class NotNullAttribute : Attribute 
{ 
} 

public class Class1 
{ 
    [return: NotNull] 
    public static string TestMethod([NotNull] string arg) 
    { 
     return arg + " + " + arg; 
    } 
} 

आप कैसे, System.Reflection का उपयोग कर, देखना होगा कि NotNullAttribute विशेषता विधि के रिटर्न मान पर लागू किया गया था? यदि आप नहीं कर सकते हैं, [वापसी:] वाक्यविन्यास के पीछे क्या उद्देश्य है?

उत्तर

9

MethodInfo में रिटर्नटाइप कस्टम एस्टेट गुण है, यदि आप GetCustomAttributes() को कॉल करते हैं तो आपको वापसी मूल्य atrtibutes मिलते हैं।

MethodInfo mi = typeof(Class1).GetMethod("TestMethod"); 
object[] attrs = mi.ReturnTypeCustomAttributes.GetCustomAttributes(true); 
+0

गह। आपके उत्तर ने मुझे एहसास दिलाया कि पोस्टशर्प मेथडबेस का उपयोग कर रहा है, और यही कारण है कि वह उपलब्ध नहीं था। धन्यवाद। – Amy

+2

बीटीडब्लू, यदि आप एकमात्र संदर्भ में असेंबली लोड कर रहे हैं (जो मैं अपने सरलीकृत परीक्षण मामले के बावजूद ऐसा नहीं कर रहा था), तो यह समाधान वास्तव में काम नहीं करेगा। इसके बजाए, आपको इसका उपयोग करना होगा: CustomAttributeData.GetCustomAttribute (methodInfo.ReturnParameter) –

+3

वहाँ भी 'mi.ReturnParameter.GetCustomAttributes' आदि है। @ एमी, कारण' वे विधिबेस 'पर उपलब्ध नहीं हैं, ऐसा लगता है कि कन्स्ट्रक्टर अनुमति नहीं देते हैं वापसी प्रकार, जबकि "गैर-कन्स्ट्रक्टर विधियां" करते हैं (वे सी # विधियां हैं, सी # गुण/गुणकों/घटनाओं, सी # ऑपरेटरों के लिए एक्सेसर्स)। 'शून्य' वापस आने वाले तरीके में उनके वापसी मूल्यों पर कस्टम विशेषताओं भी हो सकते हैं! –

संबंधित मुद्दे