【C#】foreach null チェック | demicadeのブログ

demicadeのブログ

iPhoneアプリ開発素人のメモ的なブログです。

久方ぶりの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代未経験で転職する方法