检查列表在C#中是否为空[关闭]


123

我有一个从数据库填充的对象列表。如果列表为空,我需要显示一条错误消息,否则显示网格视图。

如何检查List<T>C#中a 是否为空?


9
那么使用有什么问题if (list.Count == 0) { /* ... */ }呢?
巴特·范·尼罗普

11
if (!list.Any())
Tharwen

10
无法理解为什么这个问题已被否决。对我来说,这是非常具体的(对象列表)。这里没有“不清楚”。这个问题有超过3万的观看次数。+1
MarceloBarbosa 2015年

2
这个问题很合理。“如果列表为空,我需要显示一条错误消息”。请记住,在人际交流中,并非每个角色都很重要。
Todd Painton

9
这也是Google排名第一的结果C# list isempty。我认为该问题的无关紧要部分应予以删除,我投票重新开始。
Felix Dombek '18

Answers:


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
注意:第二种方法假定使用ASP.NET。
Tim Schmelter 2013年

2
list == null首先检查是否最好?
2017年

2
@ᴍᴀᴛᴛʙᴀᴋᴇʀ,var someList =新的List <string>(); 将被实例化(因此不为null),但将没有要处理的元素
daviesdoesit

73

如果您使用的是列表实现,IEnumerable<T>并且Linq是一个选项,则可以使用Any

if (!list.Any()) {

}

否则,通常分别在数组和集合类型上具有Lengthor Count属性。


10
快速说明:list.Any的性能要比count好得多。
阿德里安·洛佩兹

2
@AdrianLopez:您能详细说明一下吗?如果您有一个.Count.Length属性,List那么.Any()比检查可跟踪当前长度或计数的集合的属性快得多的方法可能是什么?如果您只有Enumerator,那.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 
    }

您可以使datagrid可见为false,并使其在else部分可见。


@NetMage这不是列表的工作方式。这是一项O(1)操作,没有为元素计数进行任何迭代。请参阅List<T>.Count
斯宾塞·维克佐雷克

@SpencerWieczorek您是正确的,该评论既旧又错误:)尽管总的来说,我还是希望Any()更好地表达意图,并且在您不了解实际情况时表现更好List<T>
NetMage

18

如何使用该Count属性。

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

3
计数是一种财产,而不是一种方法
穆斯林本·达乌

5
@MoslemBenDhaou取决于是公开/正在调用的Linq扩展方法,还是对象本身的扩展方法。
Grant Thomas

@GrantThomas我将其作为List <T>对象,但是是的,您是正确的。
穆斯林本·达乌

如果listOfObjects为null怎么办?
SabriMeviş17年

2
@SabriMeviş从方法返回的集合/可枚举/列表不应为null。它应该是一个空集合。
Jeroen van Langen

8

您应该使用一个简单的IF语句

List<String> data = GetData();

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

PopulateGrid();
ShowGrid();

IMO的最简便方法。
贾巴

如果该方法返回null,则Count属性将失败。为了使代码简洁,请考虑使用空引用检查运算符“?”。示例“ 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/zh-cn/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的。
Grant Thomas

我不是winforms专家,但也不是特定于gridview asp.net的人。这是表格中的datagridview吗?
David MacCrimmon 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.