2011-02-25 11 views
18

मैं एक आवेदन बनाने के लिए सी # नेट 3.5 का उपयोग कर रहा हूं। मैं बिना किसी समस्या के .net 4.0 में वैकल्पिक पैरामीटर विशेषताओं के साथ काम कर रहा हूं। मैं नोटिस 3.5 के साथ विकल्प (वैकल्पिक हल) इसलिए की तरह अपने विधि के लिए निम्न विशेषताओं को जोड़ने के लिए है कि वहाँ:सी # 3.5 पैरामीटर के लिए वैकल्पिक और डिफ़ॉल्ट वैल्यू

public static void MethodName(string name, [Optional][DefaultValue(null)]string placeHolder) 
    { 

    } 

हालांकि मैं विधि के गुण को शामिल किया है, अगर मैं कोशिश करते हैं और यह बहुत की तरह फोन :

 MethodName("test"); 

संकलक शिकायत करेगा कि यह एक के बजाय दो पैरामीटर की तलाश में है। क्या यह वास्तव में सी # नेट 3.5 का उपयोग कर ऐसा करना संभव है? क्या मुझसे कुछ गलत हो रही है?

+0

वही बात हमारे साथ होती है। क्या आपको कोई समाधान मिला? – PrateekSaluja

उत्तर

33

वैकल्पिक पैरामीटर सी # 4.0 भाषा सुविधा हैं, इसलिए इससे कोई फर्क नहीं पड़ता कि आप किस ढांचे को लक्षित कर रहे हैं, लेकिन आपको वीएस 2010 या नए का उपयोग करके इसे संकलित करना होगा।

public static void MethodName(string name, string placeHolder = null) 
{ 
    // body 
} 

या यह पुराने एक में:

VS 2010 या नए में इस वाक्य का प्रयोग करें

public static void MethodName(string name, string placeHolder) 
{ 
    // body 
} 

public static void MethodName(string name) 
{ 
    MethodName(name, null); 
} 
+0

हाँ, मैंने फ्रेमवर्क संस्करण को VS2010 में 3.5 पर सेट करने का प्रयास किया, लेकिन यह अभी भी एक संकलन त्रुटि फेंकता है। "तर्क मिस्चैच"। – Deano

+0

मैं इसे पुराने स्कूल तरीके से किए बिना ऐसा करने का एक तरीका ढूंढ रहा था - ऐसा लगता है कि मुझे ऐसा करना पड़ सकता है! – Deano

+0

प्रोजेक्ट गुणों में टैब बनाने के लिए जाएं, उन्नत करें और भाषा को सी # 4.0 पर सेट करें। यह तब भी काम करना चाहिए जब .NET 3.5 ढांचा सेट हो। – rotman

6

Optional विशेषता के बाद से सी # 1.0 उपलब्ध किया गया है, और जब बाहरी के साथ अंतरसंक्रियता प्रयोग किया जाता है कोड, इसका आपके कोड में विधि कॉल पर कोई प्रभाव नहीं पड़ता है।

है के रूप में # 3 सी में कोई वैकल्पिक पैरामीटर, आप के बजाय अधिक भार का उपयोग कर सकते हैं:

public static void MethodName(string name, string placeHolder) { 
    ... 
} 

public static void MethodName(string name) { 
    MethodName(name, null); 
} 

(साइड नोट: कोई सी # संस्करण 3.5 है, कि एक रूपरेखा संस्करण है।)

4

लें निम्नलिखित स्टैक ओवरव्लो थ्रेड पर एक नज़र: C# Optional Parameters in .net 3.5

धागे में सबकुछ चिपकाने वाली प्रतिलिपि में कोई उपयोग नहीं किया गया है, क्योंकि थ्रेड में काफी कुछ शामिल है। शुभकामनाएँ।

+0

हाँ, मैंने यह प्रश्न देखा - दुर्भाग्य से मैंने फ्रेमवर्क संस्करण को VS2010 में 3.5 पर सेट करने का प्रयास किया, लेकिन यह अभी भी एक संकलन त्रुटि फेंकता है। "तर्क मिस्चैच" – Deano

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