İşte Marc Gravell'in cevabının kodu ve bunu kullanma örneği.
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.");
}
}
}
Dediği gibi, tüm diziler tekrarlanabilir değildir, böylece kod bazen sorunlara neden olabilir, çünkü IsAny()
diziden geçmeye başlar. Robert Harvey'nin cevabının ne anlama geldiğinden şüpheleniyorum , genellikle kontrol etmenize null
ve boşaltmanıza gerek yoktur. Genellikle, null olup olmadığını kontrol edip kullanabilirsiniz foreach
.
Dizi iki kez başlatmak ve yararlanmak için foreach
, sadece böyle bir kod yazdım:
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.");
}
}
}
Uzatma yöntemi yazarak birkaç satır kaydeder sanırım, ama bu kod benim için daha net görünüyor. Bazı geliştiricilerin bunun IsAny(items)
diziye adım atmaya başlayacağını hemen fark etmeyeceğinden şüpheleniyorum . (Elbette çok fazla dizi kullanıyorsanız, hızlı bir şekilde onlardan hangi adımları geçeceğini düşünürsünüz.)