【C#】【VB.NET】要素が含まれているかAny()したらArgumentNullExceptionが発生する
インスタンス生成していないならエラーが起きるのも当然ちゃ当然でしょうが、
生成されているか判断する必要がある場合もあるでしょう。
if ((list != null) && (list.Any()))とかすればいいんでしょうけど、
String.IsNullOrEmptyみたいな便利なモノはないかと調べてみました。
参考サイト
stackoverflow.com
使用例
public partial class Form1 : Form { public Form1() { InitializeComponent(); List<string> list = null; if (list.AnyOrDefault()) { Console.WriteLine("The List has any item."); } else { Console.WriteLine("The List does not has any item."); } } } /// <summary> /// 拡張メソッドを定義する静的クラス /// </summary> public static class Extentions { /// <summary> /// null参照エラーではfalseを返す拡張Anyメソッド /// </summary> /// <typeparam name="T">Type</typeparam> /// <param name="source">Source</param> /// <returns></returns> public static bool AnyOrDefault<T>(this IEnumerable<T> source) { return (source?.Any() ?? false); } }
エラーを発生させないで結果を得ることができました。
ちな、VB.NETの場合はnull合体演算子(??)がないので(たぶん)、そのまま使うことができません。
使用例(VB.NET)
Public Class Form1 Sub New() ' この呼び出しはデザイナーで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 Dim list As List(Of String) = Nothing If list.AnyOrDefault() Then Console.WriteLine("The List has any item.") Else Console.WriteLine("The List does not has any item.") End If End Sub End Class Module Extentions <System.Runtime.CompilerServices.Extension()> Public Function AnyOrDefault(Of type)(source As IEnumerable(Of type)) As Boolean Return If(source?.Any() Is Nothing, False, source.Any()) End Function End Module