ienumerableがnullでない場合、そのienumerableが空の場合、foreachループは実行されません。ただし、コレクションが空の場合は、代わりに他のコードを実行する必要があります。完璧に機能するサンプルコードは次のとおりです。
List<string> theList = new List<string>() {};
if (theList.Count > 0) {
foreach (var item in theList) {
//do stuff
}
} else {
//throw exception or do whatever else
}
とにかく、すぐに使えるC#、拡張メソッドなどを使用してこれを短縮することはできますか?私の頭の中で、私は次のことがクールだと思っていましたが、明らかにそれは機能しません:
List<string> theList = new List<string>() {};
foreach (var item in theList) {
//do stuff
} else {
//throw exception or do whatever else
}
編集:Maartenからの洞察のおかげで私の解決策:コレクションがnullまたは空の場合、以下は例外をスローします(コレクションがnullまたは空の場合を単に無視したい場合は、foreachで三項演算子を使用してください)
static class Extension {
public static IEnumerable<T> FailIfNullOrEmpty<T>(this IEnumerable<T> collection) {
if (collection == null || !collection.Any())
throw new Exception("Collection is null or empty");
return collection;
}
}
class Program {
List<string> theList = new List<string>() { "a" };
foreach (var item in theList.FailIfNullOrEmpty()) {
//do stuff
}
}