2012-09-26 17 views
9

सी # में यह एक विधि में डिफ़ॉल्ट पैरामीटर मान का उपयोग करने के उदाहरण में संभव है:विधि पैरामीटर सरणी डिफ़ॉल्ट मान

public void SomeMethod(String someString = "string value") 
{ 
    Debug.WriteLine(someString); 
} 

लेकिन अब मैं विधि में पैरामीटर के रूप में एक सरणी का उपयोग करना चाहते हैं, और एक सेट इसके लिए डिफ़ॉल्ट मान।
मैं सोच रहा था यह कुछ इस तरह दिखना चाहिए:

public void SomeMethod(String[] arrayString = {"value 1", "value 2", "value 3"}) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 

लेकिन यह काम नहीं करता।
क्या ऐसा करने का कोई सही तरीका है, अगर यह भी संभव है?

+0

परिभाषित करें "काम नहीं करता है"

यहाँ सबसे अच्छा विकल्प एक अधिभार बनाना है। – Tudor

+0

संदर्भ प्रकारों के लिए एक समाधान है। डिफ़ॉल्ट को "शून्य" पर सेट करें। फिर, कोड ब्लॉक के अंदर जांचें कि क्या पैरामीटर शून्य पर सेट है, यदि यह शून्य प्रकार संदर्भ प्रकार पैरामीटर के लिए डिफ़ॉल्ट मान सेट करता है। –

उत्तर

15

क्या ऐसा करने का कोई सही तरीका है, यदि यह भी संभव है?

यह निम्न (Optional Arguments से) से एक होना चाहिए (सीधे) संभव डिफ़ॉल्ट मान के रूप में नहीं है:

  • एक निरंतर अभिव्यक्ति;
  • नए वैलटाइप() के रूप में एक अभिव्यक्ति की अभिव्यक्ति, जहां वैलटाइप एक मान प्रकार है, जैसे कि एनम या स्ट्रक्चर;
  • फॉर्म डिफ़ॉल्ट (वैलटाइप) की अभिव्यक्ति, जहां वैलटाइप एक मान प्रकार है।

एक सरणी बनाना वैकल्पिक तर्कों के लिए किसी भी संभावित डिफ़ॉल्ट मान फिट नहीं है।

public void SomeMethod() 
{ 
    SomeMethod(new[] {"value 1", "value 2", "value 3"}); 
} 


public void SomeMethod(String[] arrayString) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
+0

ठीक है, धन्यवाद। मुझे इस पर जाना होगा। मैं इसे लगभग 11 मिनट में अपने उत्तर के रूप में स्वीकार करूंगा। –

10

इस प्रयास करें::

public void SomeMethod(String[] arrayString = null) 
{ 
    arrayString = arrayString ?? {"value 1", "value 2", "value 3"}; 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
someMethod(); 
+0

आपके इनपुट के लिए धन्यवाद। यह जाने का एक अच्छा तरीका प्रतीत होता है, हालांकि मैं इस पर रीड के जवाब के साथ रहना चाहता हूं क्योंकि यह मेरे लिए कुछ अन्य तरीकों से भी आसान है। –

+3

+1 यह एक चिकना दृष्टिकोण है, लेकिन यह आपको शून्य * स्पष्ट रूप से * में गुज़रने वाले उपयोगकर्ता के बीच अंतर करने का तरीका नहीं देता है और केवल पैरामीटर का उपयोग नहीं कर रहा है (यही कारण है कि मैं आम तौर पर ओवरलोड दृष्टिकोण पसंद करता हूं)। यह इस मामले में महत्वपूर्ण हो सकता है या नहीं भी हो सकता है। –

+0

आपका स्वागत है। – Nathan

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