2010-08-04 16 views
12

यहां मेरी विधि है:सी # 4.0 वैकल्पिक पैरामीटर्स - प्रकार "वैकल्पिक" प्रकार के वैकल्पिक पैरामीटर निर्दिष्ट करने के लिए कैसे?

public void SomeQuery(string email = "", Guid userId = Guid.Empty) 
{ 
    // do some query 
} 

userId मुझे एक त्रुटि दे रहा है क्योंकि यह एक संकलन-समय स्थिर होना चाहिए, जिसे मैं समझता हूं। लेकिन जब भी मैं एक कॉन्स घोषित करता हूं:

private const emptyGuid = Guid.Empty; 

फिर विधि हस्ताक्षर को इस प्रकार बदलें:

public void SomeQuery(string email = "", Guid userId = emptyGuid) 
{ 
    // do some query 
} 

अभी भी कोई प्यार नहीं है।

मुझे क्या याद आ रही है?

+0

संभावित डुप्लिकेट [मैं सी # में Guid.Empty के लिए एक पैरामीटर कैसे लागू हो सकता है?] (Https://stackoverflow.com/प्रश्न/5117970/कैसे-कर सकते हैं-ए-डिफ़ॉल्ट एक पैरामीटर करने वाली guid खाली-इन-सी) –

उत्तर

20

आप Guid आला का एक नया उदाहरण के लिए यह स्थापित करने की कोशिश की।

+0

यही वह है। चीयर्स! – RPM1984

+0

@ RPM1984 इसे सुनकर खुशी हुई! –

+3

इस दृष्टिकोण के बारे में अच्छी बात यह है कि आप अभी भी इसके कोड में Guid.Empty का उपयोग करके इसका परीक्षण कर सकते हैं। जैसे अगर (userId == Guid.Empty) {...} –

2

एक बेहतर समाधान एक संस्करण है कि Guid की आवश्यकता नहीं है के साथ विधि ओवरलोड नहीं चाहेंगे? यह इस मुद्दे को हल करेगा, और मेरी राय में एक बेहतर डिजाइन होगा। बेशक, अन्य बाधाएं हो सकती हैं जिन्हें मैं इस डिजाइन की जरुरत से अनजान हूं।

public void SomeQuery(string email = "", Guid userId = new Guid()) 
{ 
    // do some query 
} 

चाल करना चाहिए:

+0

सी # 4 वैकल्पिक पैरामीटर के पूरे मुद्दे अनावश्यक रूप से अधिक भार से बचने के लिए है। मैं लगभग 7 मानकों है कि मैं के आधार पर फ़िल्टर कर रहा हूँ है (एक LINQ क्वेरी में), क्यों एक विधि एक ही कोड के साथ 7 बार ओवरलोड? मुझे लगता है कि यह 'अन्य बाधाओं' का जिक्र है। =) – RPM1984

+1

2 पैरामीटर के लिए वैकल्पिक पैरामीटर आईएमओ की तुलना में 2 ओवरलोडेड विधियों के लिए बेहतर है। मुख्य रूप से यह MySuperObject.Add (रेफरी वन, रेफरी दो, रेफरी तीन, रेफ चार, रेफ फाइव) जैसे डिज़ाइन के लिए है। VsSuperObject.Add(); –

2

शायद यह मदद मिलेगी (ऑपरेटर का उपयोग ?? और Guid नल प्रकार)

public void some_method(string name, Guid? guid = null) 
{ 
     _name = name; 
     _guid = guid ?? Guid.NewGuid(); 
} 
की
+0

हाय, अगर मैं यह कोशिश मैं संदेश (मोटे तौर पर अनुवाद) मिलता है: '' kann मानक पैरामीटर के रूप में प्रयोग नहीं किया जाना प्रकार का मान, becuse कोई standardconversion करने के लिए "System.Guid है ' – Offler

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