के रूप में IENumerable
IEnumerable<int>
प्रकार का वैकल्पिक पैरामीटर है। क्या मैं इसे
null
पर कुछ भी शुरू कर सकता हूं, उदा। मूल्यों की एक निश्चित सूची?
उत्तर
नहीं। आप केवल समय स्थिरांक संकलित कर सकते हैं। आप शून्य पर में प्रदान कर सकते हैं और फिर
void SomeMethod(IEnumerable<int> list = null)
{
if(list == null)
list = new List<int>{1,2,3};
}
अगला कोड स्निपेट Jon Skeet
द्वारा प्रसिद्ध C# in Depth
किताब से ले रहा है। पृष्ठ 371. वह पैरामीटर के लिए not set
संकेतक के रूप में शून्य का उपयोग करने का सुझाव देता है, जिसमें सार्थक डिफ़ॉल्ट मान हो सकते हैं।
static void AppendTimestamp(string filename,
string message,
Encoding encoding = null,
DateTime? timestamp = null)
{
Encoding realEncoding = encoding ?? Encoding.UTF8;
DateTime realTimestamp = timestamp ?? DateTime.Now;
using (TextWriter writer = new StreamWriter(filename, true, realEncoding))
{
writer.WriteLine("{0:s}: {1}", realTimestamp, message);
}
}
प्रयोग
AppendTimestamp("utf8.txt", "First message");
AppendTimestamp("ascii.txt", "ASCII", Encoding.ASCII);
AppendTimestamp("utf8.txt", "Message in the future", null, new DateTime(2030, 1, 1));
नहीं - डिफ़ॉल्ट पैरामीटर संकलन-समय स्थिरांक होना चाहिए।
आपकी सबसे अच्छी शर्त विधि को अधिभारित करना है। वैकल्पिक रूप से, डिफ़ॉल्ट मान को शून्य पर सेट करें और अपनी विधि के अंदर एक नल का पता लगाएं और उसे अपनी इच्छित सूची में बदल दें।
कैसे अशक्त के रूप में उसके डिफ़ॉल्ट मान रही है, और विधि के भीतर के बारे में
numbers = numbers ?? Enumerable.Empty<int>();
या
numbers = numbers ?? new []{ 1, 2, 3}.AsEnumerable();
नहीं, आप एक संकलन समय की जरूरत है लगातार।
लेकिन आप के आसपास काम के रूप में एक अधिभार इस्तेमाल कर सकते हैं: ठीक है
public void Foo(int arg1)
{
Foo(arg1, new[] { 1, 2, 3 });
}
public void Foo(int arg1, IEnumerable<int> arg2)
{
// do something
}
मुझे लगता है कि आप दूसरी विधि से पहली विधि को कॉल करना चाहते हैं, लेकिन +1 –
@lazyberezovsky: पहले ही संपादित किया गया है, धन्यवाद। –
जब से तुम समय स्थिरांक संकलन की जरूरत है आप null
के लिए सेट करने के लिए होता है, लेकिन फिर आप अपने विधि में निम्न कर सकते हैं
list = list ?? new List<int>(){1,2,3,4};
इस पैटर्न का वास्तव में भयानक दुष्प्रभाव यह है कि यदि आप उन लोगों को उजागर कर रहे हैं तो आपको डिफ़ॉल्ट पैरा के कॉल-साइट बाध्यकारी के साथ समस्या का सामना नहीं करना है कुछ क्लास लाइब्रेरी, क्योंकि इससे आप डिफ़ॉल्ट को संशोधित करने की अनुमति देते हैं और लाइब्रेरी अपडेट होने पर उन्हें प्रभावी बनाते हैं। इस प्रकार इस मुद्दे से परहेज करना: http://stackoverflow.com/a/664691/84206 – AaronLS