2009-03-09 14 views
20

इस विधि हस्ताक्षर पर विचार करें:यह निर्धारित करना कि पैरामीटर सी # में प्रतिबिंब का उपयोग करके "पैरा" का उपयोग करता है या नहीं?

public static void WriteLine(string input, params object[] myObjects) 
{ 
    // Do stuff. 
} 

मैं कैसे तय कर सकते हैं कि WriteLine विधि के "myObjects" pararameter पैरामीटर कीवर्ड का उपयोग करता है और चर तर्क ले जा सकते हैं?

+5

यह कैसे http://stackoverflow.com/ से भिन्न क्यों है प्रश्न/252656/करता है-प्रतिबिंब-एक्सपोज़-अगर-आखिरी-तर्क-के-एक-विधि-चिह्नित-साथ-पैराम के साथ? –

उत्तर

30

[ParamArrayAttribute] पर अस्तित्व के लिए जांचें।

params के साथ पैरामीटर हमेशा अंतिम पैरामीटर होगा।

15

चेक ParameterInfo, अगर ParamArrayAttribute इसे करने के लिए लागू किया गया है:

static bool IsParams(ParameterInfo param) 
{ 
    return param.GetCustomAttributes(typeof (ParamArrayAttribute), false).Length > 0; 
} 
+0

यदि आप केवल कस्टम विशेषता की उपस्थिति की जांच करना चाहते हैं, लेकिन वास्तविक विशेषता उदाहरण की आवश्यकता नहीं है, तो 'IsDefined' 'GetCustomAttributes' से अधिक कुशल है। – stakx

7

एक थोड़ा छोटे और अधिक पठनीय रास्ता:

static bool IsParams(ParameterInfo param) 
{ 
    return param.IsDefined(typeof(ParamArrayAttribute), false); 
} 
संबंधित मुद्दे

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