检查C#中的列表是否为空

lak*_*nga 100 c# gridview list isnullorempty

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

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

Tim*_*ter 123

为什么不...

bool isEmpty = !list.Any();
if(isEmpty)
{
    // error message
}
else
{
    // show grid
}
Run Code Online (Sandbox Code Playgroud)

所述GridView具有也是EmptyDataTemplate如果数据源是空的,其被示出.这是ASP.NET中的一种方法:

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

<emptydatatemplate>

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

    No Data Found!  

</emptydatatemplate> 
Run Code Online (Sandbox Code Playgroud)

  • @ᴍᴀᴛᴛʙᴀᴋᴇʀ, var someList = new List&lt;string&gt;(); 将被实例化(因此不为空)但将没有要处理的元素 (4认同)
  • 注意:第二种方法假定使用ASP.NET。 (2认同)
  • 最好先检查是否list == null吗? (2认同)

Gra*_*mas 65

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

if (!list.Any()) {

}
Run Code Online (Sandbox Code Playgroud)

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

  • 快速说明:list.Any比count更好的性能. (9认同)
  • @noox查看(.Net Core)源代码,似乎“Any”会在测试之前检查以验证检索计数是否便宜,如果您有一个不跟踪计数的“IListProvider&lt;&gt;”,则它将枚举一次。 (3认同)
  • @AdrianLopez:你能详细说明一下吗?如果你有一个 `.Count` 或 `.Length` 属性和 `List` 一样,`.Any()` 可能比检查跟踪当前长度或计数的集合的属性更快吗?如果你只有一个 Enumerator,那么 `.Any()` 当然比 `.Count() &gt; 0` 快。另请参阅:/sf/ask/21356471/ 或 /sf/ask/401913221/ ?noredirect=1&amp;lq=1 (2认同)

Kuz*_*gun 23

    If (list.Count==0){
      //you can show your error messages here
    } else {
      //here comes your datagridview databind 
    }
Run Code Online (Sandbox Code Playgroud)

您可以使您的数据网格显示为false,并使其在else部分可见.

  • @SpencerWieczorek你是对的,这个评论既旧又错误:)虽然总的来说,我仍然更喜欢`Any()`,因为它可以更好地表达意图,并且当你不知道你有一个实际的时,它的性能更高`列表&lt;T&gt;`。 (2认同)

Jer*_*gen 15

那么使用Count()方法呢.

 if(listOfObjects.Count() != 0)
 {
     ShowGrid();
     HideError();
 }
 else
 {
     HideGrid();
     ShowError();
 }
Run Code Online (Sandbox Code Playgroud)

  • @MoslemBenDhaou取决于是暴露/被调用的Linq扩展方法,还是对象的本机. (5认同)
  • Count是属性而不是方法 (2认同)
  • @SabriMeviş从方法返回的集合/可枚举/列表永远不能为空。相反,它应该是一个空集合。 (2认同)

Mos*_*aou 8

你应该使用一个简单的IF声明

List<String> data = GetData();

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

PopulateGrid();
ShowGrid();
Run Code Online (Sandbox Code Playgroud)


Tal*_*ner 6

var dataSource = lst!=null && lst.Any() ? lst : null;
// bind dataSource to gird source
Run Code Online (Sandbox Code Playgroud)