पहले से ही question on SO about "possible multiple enumerations" है, लेकिन यह प्रश्न अधिक विशिष्ट है।यहां तक कि "IsNullOrEmpty" चेक भी "IENumerable की संभावित एकाधिक गणना" चेतावनियां
निम्न विधि है, जो इनपुट के रूप में एक IEnumerable<string>
लेता है और उसके तत्वों में से प्रत्येक के खिलाफ दिए गए विधि कार्यान्वित करने पर विचार करें:
public static bool SomeMethod(IEnumerable<string> enumerable)
{
if (enumerable.IsNullOrEmpty())
{
// throw exception.
}
else
{
return (enumerable.All(SomeBooleanMethod));
}
}
उपरोक्त कोड में, IsNullOrEmpty
सिर्फ एक विस्तार विधि है जो
return (!ReferenceEquals(enumerable, null) || enumerable.Any());
समस्या यह है कि ReSharper मुझे "आईनेमेरेबल के संभावित एकाधिक अंकन" के बारे में चेतावनी दे रहा है, और मुझे वास्तव में यह नहीं पता कि यह वास्तव में एक समस्या हो सकती है या नहीं।
मैं चेतावनी का अर्थ समझता हूं, लेकिन अगर आपको वास्तव में शून्यता या खालीता के मामले में अपवाद की जांच करने और अपवाद की आवश्यकता है तो आप वास्तव में क्या कर सकते हैं?
खाली अनुक्रम पारित करने के लिए आप इस विधि को फेंकना क्यों चाहते हैं? "इस (खाली) अनुक्रम के प्रत्येक सदस्य को कुछ करने के अर्थशास्त्र" पूरी तरह से स्पष्ट हैं, है ना? साथ ही, क्या कोई विशेष कारण है कि आप 'Reference=quull()' का उपयोग केवल '== null' के बजाय क्यों करते हैं? – AakashM
यह वास्तव में नहीं है, लेकिन अब कल्पना करें कि यह एक निर्माता था। यदि मैं किसी रिक्त अनुक्रम से ऑब्जेक्ट नहीं बना सकता, तो क्या मुझे एक सिवाय नहीं फेंकना चाहिए? – User
निश्चित रूप से, यदि वास्तव में कुछ भी नहीं है तो आप कर सकते हैं; लेकिन * सामान्य रूप से * मैं कहूंगा कि खाली अनुक्रमों को किसी भी खाली रिक्त दृश्य के रूप में उतना ही अच्छा माना जाना चाहिए। उदाहरण के लिए, रिक्त अनुक्रम से निर्माण करने के लिए 'सूची <>' पूरी तरह से खुश है। बेशक मैं केवल सामान्यताओं में बात कर रहा हूं; आप अपनी स्थिति के * विवरण * जानते हैं। – AakashM