【问题标题】:Check if list is empty in C# [closed]检查C#中的列表是否为空[关闭]
【发布时间】:2013-09-22 21:57:06
【问题描述】:

我有一个通用列表对象。我需要检查列表是否为空。

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

【问题讨论】:

  • 那么使用if (list.Count == 0) { /* ... */ }有什么问题?
  • if (!list.Any())
  • 不明白为什么这个问题被否决了。对我来说,这是非常具体的(对象列表)。这里没有什么“不清楚”。这个问题有超过 30k 的浏览量。 +1
  • 这个问题很有道理。 “如果列表为空,我需要显示错误消息”。请记住,在人际交往中,并非每个角色都很重要。
  • 这也是C# list isempty 的#1 Google 结果,它完全正确。我认为问题的不相关部分应该被删除,我投票决定重新开放。

标签: c# list isnullorempty


【解决方案1】:

你可以使用Enumerable.Any:

bool isEmpty = !list.Any();
if(isEmpty)
{
    // ...
}  

如果列表可以是null,您可以使用:

bool isNullOrEmpty = list?.Any() != true;

【讨论】:

  • 先检查是否list == null不是最好吗?
  • @ᴍᴀᴛᴛʙᴀᴋᴇʀ, var someList = new List();将被实例化(因此不为空),但没有要处理的元素
【解决方案2】:

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

if (!list.Any()) {

}

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

【讨论】:

  • 快速说明:list.Any 的性能比 count 好得多。
  • @AdrianLopez:你能详细说明一下吗?如果你有一个.Count.Length 属性与List 一样,.Any() 可能比检查跟踪当前长度或计数的集合的属性更快?如果你只有一个枚举器,那么.Any() 当然比.Count() > 0 快。另见:stackoverflow.com/questions/305092/…stackoverflow.com/questions/5741617/…
  • @noox 查看 (.Net Core) 源代码,Any 似乎在测试之前检查以验证检索计数是否便宜,如果您有一个 IListProvider<> 没有t 跟踪计数,它将枚举一次。
【解决方案3】:
    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
  • @SpencerWieczorek 你是对的,那条评论既古老又错误 :) 虽然总的来说,我仍然更喜欢 Any() 更好地表达意图,并且当你不这样做时表现更好'不知道你有一个实际的List<T>
【解决方案4】:

如何使用Count 属性。

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

【讨论】:

  • 计数是属性而不是方法
  • @MoslemBenDhaou 取决于是暴露/被调用的 Linq 扩展方法,还是对象的原生方法。
  • @GrantThomas 我把它当作一个 List 对象,但是你是对的。
  • 如果 listOfObjects 为空怎么办?
  • @SabriMeviş 从方法返回的集合/可枚举/列表永远不应该是null。它应该是一个空集合。
【解决方案5】:

您应该使用简单的IF 语句

List<String> data = GetData();

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

PopulateGrid();
ShowGrid();

【讨论】:

  • IMO 最简单最好的方法。
  • 如果方法返回 null,Count 属性将失败。为了保持代码简洁,请考虑空引用检查运算符“?”。示例“如果(数据?.Count == 0)......”或经典的空检查“if (data != null && someOtherCondition) .....”
  • 将以下代码粘贴到 dotnetfiddle 中,您将看到 System.NullReferenceException: Object reference not set to an instance of an object。 using System; using System.Collections.Generic; public class Program { public static void Main() { List&lt;string&gt; stringList = null; if (stringList.Count == 0) { Console.WriteLine("no items in collection"); } } }
  • @daviesdoesit 这超出了问题的范围。这个 sn-p 明确假设 data 已定义。
【解决方案6】:
var dataSource = lst!=null && lst.Any() ? lst : null;
// bind dataSource to gird source

【讨论】:

    【解决方案7】:

    gridview 本身有一个方法可以检查您绑定的数据源是否为空,它可以让您显示其他内容。

    【讨论】:

      【解决方案8】:

      如果您使用的是网格视图,请使用空数据模板: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 特定的。是表单中的datagridview吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      相关资源
      最近更新 更多