【C# 拡張メソッド】 foreach null listのチェック

foreachは、nullチェックをしないと
’System.NullReferenceException’の例外が発生するんですよね・・・。

そこで、拡張メソッドを使って簡単回避する方法をご紹介します。

【C# 拡張メソッド】 foreach null listのチェック

例外が発生するソースコード例

Copy
public class Program { public void Main() { List<string> list = null; Console.WriteLine("①前"); foreach (var item in list) { Console.WriteLine("②ループ内"); } Console.WriteLine("③後"); } } // 【実行結果】 // ①前 // 例外がスローされました: 'System.NullReferenceException'

nullを回避をしてないので、’System.NullReferenceException’が発生してしまいます。

拡張メソッド

Copy
public static class IEnumerableExtension { public static IEnumerable<T> OrEmptyIfNull<T>(this IEnumerable<T> collection) { return collection ?? Enumerable.Empty<T>(); } }

他にも便利な拡張メソッドを知りたい方は「【C#】拡張メソッド まとめ」のページをどうぞ。

使い方①

Copy
public class Program { public void Main() { List<string> list = null; Console.WriteLine("①前"); foreach (var item in list.OrEmptyIfNull()) { Console.WriteLine("②ループ内"); } Console.WriteLine("③後"); } } // 【実行結果】 // ①前 // ③後

nullを回避をしたので、例外の発生なく処理が終了しました。

使い方②

Where句を使って条件を絞る場合にもOrEmptyIfNull()を使用することで例外発生を回避できます。

Copy
public class Member { public int Code { get; set; } public string Name { get; set; } } public class Program { public void Main() { // リストがnullの場合 List<Member> membersNull = GetNullList(); Console.WriteLine("〇〇 リストがnull 〇〇"); Console.WriteLine("==== Before ===="); foreach (var item in membersNull.OrEmptyIfNull().Where(a => a.Code == 1)) { Console.WriteLine($"==== Loop ==== Code:'{item.Code}' Name:'{item.Name}'"); } Console.WriteLine("==== After ===="); // リストがnull以外の場合 List<Member> members = GetList(); Console.WriteLine("〇〇 リストがnull以外 〇〇"); Console.WriteLine("==== Before ===="); foreach (var item in members.OrEmptyIfNull().Where(a => a.Code == 1)) { Console.WriteLine($"==== Loop ==== Code:'{item.Code}' Name:'{item.Name}'"); } Console.WriteLine("==== After ====");; } private List<Member> GetNullList() { return null; } private List<Member> GetList() { var list = new List<Member>(); list.Add(new Member { Code = 1, Name = "Sato" }); list.Add(new Member { Code = 1, Name = "Ishii" }); list.Add(new Member { Code = 2, Name = "Toda" }); return list; } } // 【実行結果】 // 〇〇 リストがnull 〇〇 // ==== Before ==== // ==== After ==== // 〇〇 リストがnull以外 〇〇 // ==== Before ==== // ==== Loop ==== Code:'1' Name:'Sato' // ==== Loop ==== Code:'1' Name:'Ishii' // ==== After ====
関連記事

メソッドの戻り値がListで結果によってnullだったり、空だったりする場合、 その判定のソースコードってけっこう長かったりします・・・・。 そこで、拡張メソッドを使って簡単解決する方法をご紹介します。 […]

C# list 空【C# 拡張メソッド】 Listのnull・空チェック
関連記事

foreachで、インデックス付きで使いたいことが時々あるんですよね。 でも使おうと思うと忘れていたり、書いてみるとけっこう面倒だったり・・・・。 そこで、拡張メソッドを使って簡単解決する方法をご紹介します。 […]

C# foreach index【C# 拡張メソッド】 foreach index付き
関連記事

拡張メソッドは、非常に便利です。 既存のクラスへのメソッドを追加して、インスタンスメソッドのように呼び出しができます。 元々クラスに存在したメソッドのように使えるので、それまで複数ステップを使って書いてい[…]

C# 拡張メソッド 【C#】拡張メソッド まとめ

\ 転職を本気で考えるなら /

  • 3つの有名スクールを現役エンジニアの視点で厳選!
  • あなたに合ったおすすめのスクールを紹介!

TECH CAMP エンジニア転職」…最短10週間で転職ができる年齢無制限のスクール!

TechAcademy Pro」…オンラインで全て完結のコスパ最強スクール!

DMM WEBCAMP」…給付金の対象講座もある実力派スクール!

参考サイト

【C#】foreach null チェック demicadeのブログ
stackoverflow.com:Check for null in foreach loop