다음은 Marc Gravell 's answer 의 코드 와 사용 예입니다.
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
및 비 웁니다. 종종 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)
실제로 시퀀스를 단계별로 시작 한다는 것을 즉시 인식하지 못할 것이라고 생각합니다 . (물론 많은 시퀀스를 사용하는 경우 시퀀스를 통해 어떤 단계를 거치는 지 생각하는 법을 빨리 배우게됩니다.)