Berikut kode dari jawaban Marc Gravell , bersama dengan contoh menggunakannya.
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.");
}
}
}
Seperti yang dia katakan, tidak semua urutan dapat diulang, sehingga kode kadang-kadang dapat menyebabkan masalah, karena IsAny()
mulai melangkah melalui urutan. Saya menduga apa maksud jawaban Robert Harvey adalah bahwa Anda sering tidak perlu memeriksa null
dan mengosongkan. Seringkali, Anda dapat memeriksa null dan kemudian menggunakannya foreach
.
Untuk menghindari memulai urutan dua kali dan memanfaatkan foreach
, saya hanya menulis beberapa kode seperti ini:
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.");
}
}
}
Saya kira metode ekstensi menghemat beberapa baris pengetikan, tetapi kode ini tampaknya lebih jelas bagi saya. Saya menduga bahwa beberapa pengembang tidak akan segera menyadari bahwa IsAny(items)
sebenarnya akan mulai melangkah melalui urutan. (Tentu saja jika Anda menggunakan banyak urutan, Anda dengan cepat belajar untuk memikirkan langkah apa yang melaluinya.)