久方ぶりのdemicadeです。
今日は拡張メソッド。
ネタ元
https://stackoverflow.com/questions/11734380/check-for-null-in-foreach-loop
foreachはnullチェックしないと落ちるんですよねぇ。
で、拡張メソッドを使って回避する方法です。
拡張メソッドはこんな感じです。ネタ元そのままです。
public static class IEnumerableExtension
{
public static IEnumerable<T> OrEmptyIfNull<T>(this IEnumerable<T> collection)
{
return collection ?? Enumerable.Empty<T>();
}
}
テストしてみる。
List<string> list = null;
try
{
// 通常
Console.WriteLine("① 前");
foreach (var item in list)
{
Console.WriteLine("① 内");
}
}
catch(Exception ex)
{
Console.WriteLine("① catch");
Console.WriteLine(ex.ToString());
}
Console.WriteLine("① 後");
// 拡張メソッド使用
Console.WriteLine("② 前");
foreach (var item in list.OrEmptyIfNull())
{
Console.WriteLine("② 内");
}
Console.WriteLine("② 後");
**************************
結果
① 前
型 'System.NullReferenceException' の初回例外が TestApp.exe で発生しました
① catch
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
場所 ・・・・・
① 後
② 前
② 後
拡張メソッドは素敵です!!
demicadeが昔苦労したなぁ・・・・。(遠い目)ってことが書いてあるサイトを見つけたので、リンク貼っておきます。
初心者の時の苦しみ:初心者プログラマがスキルアップするための方法
30代の転職:(経験者)IT業界に30代未経験で転職する方法