2011-08-04 7 views
30

क्या कोई इसका उदाहरण प्रदान कर सकता है?सी # - खाली पैरामीटर <string> वैकल्पिक पैरामीटर के रूप में कैसे उपयोग करें

मैं null, string.Empty और वस्तु प्रारंभ की कोशिश की है लेकिन जब से डिफ़ॉल्ट मान संकलन समय

+1

आप इस कोशिश की "" – raym0nd

उत्तर

64

उपयोग कर रहा हूँ बस अशक्त कोलेसिंग ऑपरेटर और खाली सूची का एक उदाहरण का उपयोग

public void Process(string param1, List<string> param2 = null) { 
    param2 = param2 ?? new List<String>(); 
} 

इस के साथ समस्या यह है कि "param2" शून्य है अगर और आप एक नया संदर्भ असाइन करते हैं तो यह कॉलिंग संदर्भ में पहुंच योग्य नहीं होगा।

+1

+1 जो मैं करता हूं और यह तेज़ है! –

+0

अच्छा विचार। (आप "नया" गायब हैं जहां से आप सूची बनाते हैं) – heisenberg

+0

हाँ, धन्यवाद। मैंने पोस्ट संपादित किया है। – Vasea

-7

आप new List<string>() का इस्तेमाल किया है पर स्थिर हो गया है कि वे काम नहीं करते?

+4

नहीं एक संकलन समय निरंतर। – Domenic

2

यह असंभव है। आपको इसके बजाय विधि अधिभार का उपयोग करना चाहिए।

public static void MyMethod(int x, List<string> y) { } 
public static void MyMethod(int x) 
{ 
    MyMethod(x, Enumerable<string>.Empty()); 
} 
+0

यह असंभव नहीं है: http://msdn.microsoft.com/en-us/library/dd264739.aspx –

+1

डिफ़ॉल्ट मान के रूप में एक खाली सूची जैसे निरंतर गैर-संकलन समय होना असंभव है। मुझे पता है कि आप सी # में पैरामीटर के लिए डिफ़ॉल्ट मानों का उपयोग कर सकते हैं, जाहिर है ... – Domenic

+1

हालांकि, यह एकमात्र समाधान होगा या 4.0 से पहले सी # संस्करण का उपयोग करने वाला कोई भी होगा। – shmeeps

2
private void test(List<string> optional = null) 
    { 

    } 

सूची के बजाय स्ट्रिंग के बारे में खेद है। अशक्त 4.0 पर मेरे लिए ठीक काम करता है, मैं दृश्य स्टूडियो 2010

+0

वह 'स्ट्रिंग' है, न कि 'सूची ' – Domenic

+0

इसे ठीक करें, और संकलित करें। – Drake

+0

यह संकलित करता है, लेकिन आपको रन टाइम –

5

तुम भी निम्न default जो एक संकलन समय-स्थिर है (null एक List<T> के मामले में) का उपयोग कर सकते हैं:

void DoSomething(List<string> lst = default(List<string>)) 
{ 
    if (lst == default(List<string>)) lst = new List<string>(); 
} 
+0

मेरे मामले में सबसे अच्छा समाधान! – MozzieMD

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