นี่คือรหัสจากคำตอบของ Marc Gravellพร้อมกับตัวอย่างการใช้งาน
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)
จริง ๆ แล้วจะเริ่มก้าวผ่านลำดับ (แน่นอนว่าถ้าคุณใช้ลำดับมากคุณจะเรียนรู้ที่จะทำตามขั้นตอนเหล่านั้นอย่างรวดเร็ว)