यहां मार्क ग्रेवेल के उत्तर का कोड है , साथ ही इसका उपयोग करने का एक उदाहरण है।
using System;
using System.Collections.Generic;
using System.Linq;
public static class Utils
{
public static bool IsAny<T>(this IEnumerable<T> data)
{
return data != null && data.Any();
}
}
class Program
{
static void Main(string[] args)
{
IEnumerable<string> items;
//items = null;
//items = new String[0];
items = new String[] { "foo", "bar", "baz" };
/*** Example Starts Here ***/
if (items.IsAny())
{
foreach (var item in items)
{
Console.WriteLine(item);
}
}
else
{
Console.WriteLine("No items.");
}
}
}
जैसा कि वे कहते हैं, सभी अनुक्रम दोहराए जाने योग्य नहीं हैं, इसलिए यह कोड कभी-कभी समस्या पैदा कर सकता है, क्योंकि IsAny()
अनुक्रम के माध्यम से आगे बढ़ना शुरू होता है। मुझे संदेह है कि रॉबर्ट हार्वे के जवाब का मतलब यह था कि आपको अक्सर जांच करने null
और खाली करने की आवश्यकता नहीं है । अक्सर, आप बस नल की जांच कर सकते हैं और फिर उपयोग कर सकते हैं foreach
।
अनुक्रम को दो बार शुरू करने और इसका लाभ उठाने से बचने के लिए foreach
, मैंने कुछ कोड इस तरह लिखे:
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
IEnumerable<string> items;
//items = null;
//items = new String[0];
items = new String[] { "foo", "bar", "baz" };
/*** Example Starts Here ***/
bool isEmpty = true;
if (items != null)
{
foreach (var item in items)
{
isEmpty = false;
Console.WriteLine(item);
}
}
if (isEmpty)
{
Console.WriteLine("No items.");
}
}
}
मुझे लगता है कि एक्सटेंशन विधि आपको टाइपिंग की कुछ पंक्तियाँ सहेजती है, लेकिन यह कोड मुझे स्पष्ट लगता है। मुझे संदेह है कि कुछ डेवलपर्स तुरंत महसूस नहीं IsAny(items)
करेंगे कि वास्तव में अनुक्रम के माध्यम से आगे बढ़ना शुरू हो जाएगा। (बेशक यदि आप बहुत सारे दृश्यों का उपयोग कर रहे हैं, तो आप जल्दी से उनके बारे में क्या कदम उठाते हैं, इस बारे में सोचना सीखें।)