2013-02-09 15 views
12

वहाँ एक रास्ता नीचे सी # विधि लिखने के लिए है बिना वैकल्पिक पैरामीटर कैसे निर्धारित करें:संकलन समय निरंतर

public string Download(Encoding contentEncoding = Encoding.UTF8) { 
    // codes... 
} 

बिना:

public string Download(Encoding contentEncoding = null) { 
    defaultEncoding = contentEncoding ?? Encoding.UTF8; 
    // codes... 
} 

एक डिफ़ॉल्ट पैरामीटर जोड़ा साथ तो यह इस तरह दिखता है एक संकलन समय स्थिर का उपयोग कर?

उत्तर

15

संक्षेप में। संख्या

वैकल्पिक पैरामीटर समय स्थिरांक या मूल्य प्रकार संकलित करने की आवश्यकता है।

Named and Optional Arguments (C# Programming Guide) से MSDN पर

:

प्रत्येक वैकल्पिक पैरामीटर इसकी परिभाषा के भाग के रूप में एक डिफ़ॉल्ट मान है। यदि उस पैरामीटर के लिए कोई तर्क नहीं भेजा जाता है, तो डिफ़ॉल्ट मान का उपयोग किया जाता है। एक डिफ़ॉल्ट मान निम्न प्रकार के अभिव्यक्तियों में से एक होना चाहिए:

  • निरंतर अभिव्यक्ति;
  • फॉर्म new ValType() की अभिव्यक्ति, जहां ValType एक मान प्रकार है, जैसे कि एनम या स्ट्रक्चर;
  • default(ValType) फॉर्म की अभिव्यक्ति, जहां ValType एक मान प्रकार है।

आप प्राप्त करने के लिए अधिक भार से पूरा किया जा सकता चाहते करने लगते हैं क्या:

public string Download() 
{ 
    return Download(Encoding.UTF8); 
} 

public string Download(Encoding contentEncoding) 
{ 
    defaultEncoding = contentEncoding ?? Encoding.UTF8; 
    // codes... 
} 

ध्यान दें कि यह वैकल्पिक पैरामीटर के रूप में काफी एक ही रूप में डिफ़ॉल्ट मान कठिन कोडित हो जाता है नहीं है, वैकल्पिक पैरामीटर के साथ कॉलर में (यही कारण है कि उनके लिए प्रतिबंध मौजूद हैं)।

+1

। शॉर्ट-हाथ में –

6

उपयोग भार के:

public string Download(Encoding contentEncoding) 
{ 
    // codes... 
} 

public string Download() 
{ 
    return Download(Encoding.UTF8); 
} 
4
public static string Download(Encoding encoder = null) 
{ 
    if (encoder == null) 
     encoder = Encoding.Default 


    string returnVal=""; 
    // do something 

    return returnVal; 
} 
इस समाधान वह भी `ArgumentNullException` दूसरा अधिभार में फेंक करना चाह सकते हैं जब` contentEncoding` रिक्त है साथ
+0

। एन्कोडर == एन्कोडर ?? Encoding.Default – BrilBroeder

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