C#でリストが空かどうかを確認します[終了]


123

データベースから読み込まれたオブジェクトのリストがあります。リストが空の場合はエラーメッセージを表示し、それ以外の場合はグリッドビューを表示する必要があります。

List<T>C#でa が空かどうかを確認するにはどうすればよいですか?


9
では、使用の何が問題になっていif (list.Count == 0) { /* ... */ }ますか?
Bart van Nierop、2013

11
またはif (!list.Any())
Tharwen、2013

10
この質問が反対投票された理由を理解できません。私にとってそれは非常に具体的です(オブジェクトのリスト)。ここには「不明」は何もありません。この質問の閲覧回数は3万回を超えています。+1
MarceloBarbosa

2
質問は完全に理にかなっています。「リストが空の場合、エラーメッセージを表示する必要があります」。人間のコミュニケーションでは、すべてのキャラクターが重要なわけではないことを忘れないでください。
Todd Painton、2015年

9
これは、Googleの第1位の結果でもあり、C# list isempty完全に適切です。質問の無関係な部分は削除する必要があると思います。再開することに投票します。
Felix Dombek、2018年

回答:


142

何故なの...

bool isEmpty = !list.Any();
if(isEmpty)
{
    // error message
}
else
{
    // show grid
}

GridViewまたているEmptyDataTemplateデータソースが空である場合に示されています。これはASP.NETでのアプローチです。

<emptydatarowstyle backcolor="LightBlue" forecolor="Red"/>

<emptydatatemplate>

  <asp:image id="NoDataErrorImg"
    imageurl="~/images/NoDataError.jpg" runat="server"/>

    No Data Found!  

</emptydatatemplate> 

2
注:2番目のアプローチはASP.NETを前提としています。
Tim Schmelter 2013

2
list == null最初に確認するのは最善ではないでしょうか?
ʙᴀᴋᴇʀᴍᴀᴛᴛ

2
@ᴍᴀᴛᴛʙᴀᴋᴇʀ、var someList = new List <string>(); インスタンス化されます(したがってnullにはなりません)が、処理する要素が空になります
daviesdoesit

73

使用しているリストの実装がでIEnumerable<T>、Linqがオプションの場合は、次を使用できますAny

if (!list.Any()) {

}

それ以外の場合は、通常、配列とコレクション型のそれぞれにLengthまたはCountプロパティがあります。


10
簡単なメモとして:list.Anyはcountよりもはるかに優れたパフォーマンスを持っています。
エイドリアン・ロペス

2
@AdrianLopez:それについて詳しく説明できますか?現在の長さまたは数を追跡するコレクションのプロパティをチェックするよりも速くできる可能性があることと同様に、.Countまたは.LengthプロパティList.Any()ある場合、列挙子しかない場合.Any()は、もちろんよりも高速です.Count() > 0。参照してください:stackoverflow.com/questions/305092/...またはstackoverflow.com/questions/5741617/...
noox

2
@noox(.Net Core)ソースを見ると、Anyテストする前にカウントを取得する方が簡単であることを確認するためのチェックIListProvider<>が行われているようです。
NetMage

26
    If (list.Count==0){
      //you can show your error messages here
    } else {
      //here comes your datagridview databind 
    }

データグリッドをfalseにして、elseセクションに表示することができます。


@NetMageそれはそれがリストのために働く方法ではありません。これはO(1)操作であり、要素をカウントするための反復は行われません。を参照してくださいList<T>.Count
Spencer Wieczorek

@SpencerWieczorek正解です。そのコメントは古く、間違っていました:)一般的には、Any()意図をよりよく表現したり、実際のを知らない場合はパフォーマンスを向上したりしたいと思いますList<T>
-NetMage

18

Countプロパティの使用についてはどうですか。

 if(listOfObjects.Count != 0)
 {
     ShowGrid();
     HideError();
 }
 else
 {
     HideGrid();
     ShowError();
 }

3
カウントは方法ではなくプロパティ
イスラム教のベンダウ2013

5
@MoslemBenDhaou公開されている/呼び出されているLinq拡張メソッドなのか、オブジェクトにネイティブなのかによって異なります。
Grant Thomas

@GrantThomas List <T>オブジェクトとして受け取りましたが、そうです。
Moslem Ben Dhaou 2013

listOfObjectsがnullの場合はどうなりますか?
SabriMeviş2017年

2
@SabriMevişメソッドから返されたコレクション/列挙可能/リストは決してであってはなりませんnull。代わりに空のコレクションである必要があります。
Jeroen van Langen 2017年

8

単純なIFステートメントを使用する必要があります

List<String> data = GetData();

if (data.Count == 0)
    throw new Exception("Data Empty!");

PopulateGrid();
ShowGrid();

最も簡単で最良の方法のIMO。
Jabba

メソッドがnullを返す場合、Countプロパティは失敗します。コードを簡潔にするために、null参照チェック演算子「?」を検討してください。例 "if(data?.Count == 0)。。。.." または従来のnullチェック「if(data!= null && someOtherCondition).....」
daviesdoesit

次のコードをdotnetfiddleに貼り付けると、System.NullReferenceExceptionが表示されます。オブジェクト参照がオブジェクトのインスタンスに設定されていません。 using System; using System.Collections.Generic; public class Program { public static void Main() { List<string> stringList = null; if (stringList.Count == 0) { Console.WriteLine("no items in collection"); } } }
daviesdoesit

6
var dataSource = lst!=null && lst.Any() ? lst : null;
// bind dataSource to gird source

3

gridview自体には、バインド先のデータソースが空であるかどうかをチェックするメソッドがあり、何かを表示できます。


0

gridviewを使用している場合は、空のデータテンプレートを使用します。http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.emptydatatemplate.aspx

      <asp:gridview id="CustomersGridView" 
        datasourceid="CustomersSqlDataSource" 
        autogeneratecolumns="true"
        runat="server">

        <emptydatarowstyle backcolor="LightBlue"
          forecolor="Red"/>

        <emptydatatemplate>

          <asp:image id="NoDataImage"
            imageurl="~/images/Image.jpg"
            alternatetext="No Image" 
            runat="server"/>

            No Data Found.  

        </emptydatatemplate> 

      </asp:gridview>

これは非常にASP.NET固有です。
グラントトーマス

私はwinformsの人ではありませんが、gridview asp.net固有ではありません。フォームのデータグリッドビューですか?
David MacCrimmon 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.