1. ホーム
  2. c#

[解決済み] List<string> が空かヌルかチェックする。

2023-05-01 03:24:05

質問

リストがありますが、時々、空やNULLになります。リストにアイテムが含まれているかどうかを確認し、含まれていない場合はリストにオブジェクトを追加できるようにしたいです。

 // I have a list, sometimes it doesn't have any data added to it
    var myList = new List<object>(); 
 // Expression is always false
    if (myList == null) 
        Console.WriteLine("List is never null"); 
    if (myList[0] == null) 
        myList.Add("new item"); 
    //Errors encountered:  Index was out of range. Must be non-negative and less than the size of the collection.
    // Inner Exception says "null"

どのように解決するのですか?

以下のコードを試してみてください。

 if ( (myList!= null) && (!myList.Any()) )
 {
     // Add new item
     myList.Add("new item"); 
 }

これらのチェックのために、私は今、次の解決策を使いたいので、遅いEDITです。 まず、Safe()と呼ばれる小さな再利用可能な拡張メソッドを追加します。

public static class IEnumerableExtension
{       
    public static IEnumerable<T> Safe<T>(this IEnumerable<T> source)
    {
        if (source == null)
        {
            yield break;
        }

        foreach (var item in source)
        {
            yield return item;
        }
    }
}

といった具合にします。

 if (!myList.Safe().Any())
 {
      // Add new item
      myList.Add("new item"); 
 }

個人的にはこの方が冗長でなく、読みやすいと思います。これで、NULLチェックをすることなく、安全にどんなコレクションにもアクセスできるようになりました。

そしてもう一つのEDITは、拡張メソッドを必要とせず、?(Null-conditional)演算子を使用します(C# 6.0)。

if (!(myList?.Any() ?? false))
{
    // Add new item
    myList.Add("new item"); 
}