Проверить, пуст ли список в C # [закрыто]


125

У меня есть список объектов, заполненных из базы данных. Мне нужно отобразить сообщение об ошибке, если список пуст, и в противном случае отобразить представление сетки.

Как проверить List<T>, пуст ли в C #?


9
Так что плохого в использовании if (list.Count == 0) { /* ... */ }?
— Барт ван Ниероп,

11
Илиif (!list.Any())
— Тарвен

10
Не могу понять, почему этот вопрос был отклонен. Для меня это очень специфично (СПИСОК ОБЪЕКТОВ). Здесь нет ничего «непонятного». Этот вопрос набрал более 30 тысяч просмотров. +1
— MarceloBarbosa 09

2
Вопрос имеет смысл. «Мне нужно вывести сообщение об ошибке, если список пуст». Помните, что в человеческом общении важен не каждый персонаж.
— Тодд Пейнтон

9
Это также результат №1 Google, C# list isemptyдля которого он полностью соответствует действительности. Я думаю, что не относящиеся к делу части вопроса следует отредактировать, и я голосую за повторное открытие.
— Феликс Домбек

Ответы:


143

Почему нет...

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.
— Тим Шмелтер

2
Не лучше ли list == nullсначала проверить, действительно ли ?
— ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
@ ᴍᴀᴛᴛʙᴀᴋᴇʀ, var someList = новый список <строка> (); будет создан экземпляр (и, следовательно, не будет нулевым), но не будет содержать элементов для обработки
— daviesdoesit

74

Если вы используете реализацию списка, IEnumerable<T>а Linq - вариант, вы можете использовать Any:

if (!list.Any()) {

}

В противном случае у вас обычно есть свойство Lengthили Countдля массивов и типов коллекций соответственно.


10
Вкратце: list.Any имеет гораздо лучшую производительность, чем count.
— Адриан Лопес,

2
@AdrianLopez: можешь подробнее рассказать об этом? Если у вас есть свойство .Countили, что можно сделать быстрее, чем проверка свойства коллекции, которая отслеживает текущую длину или количество? Если у вас есть только Enumerator, то, конечно, быстрее, чем . См. Также: stackoverflow.com/questions/305092/… или stackoverflow.com/questions/5741617/….LengthList.Any().Any().Count() > 0
— 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.
— Spencer Wieczorek

@SpencerWieczorek Вы правы, этот комментарий был старым и ошибочным :) Хотя в целом, я все же предпочел бы Any()лучше выражать намерения, а также быть более эффективным, когда вы не знаете, что у вас есть реальный List<T>.
— NetMage

18

Что насчет использования Countсобственности.

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

3
Подсчет - это свойство, а не метод
— мусульманин Бен Дхау

5
@MoslemBenDhaou Зависит от того, является ли это метод расширения Linq, открытый / вызываемый, или собственный для объекта.
— Грант Томас

@GrantThomas Я воспринял это как объект List <T>, но да, вы правы.
— Мусульманин Бен Дхау

что, если listOfObjects имеет значение null?
— Сабри Мевиш

2
@ SabriMeviş коллекция / ienumerable / list, возвращаемая методом, никогда не должна быть null. Вместо этого это должна быть пустая коллекция.
— Йерун ван Ланген

8

Вы должны использовать простую IFинструкцию

List<String> data = GetData();

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

PopulateGrid();
ShowGrid();

Самый простой и лучший способ ИМО.
— Джабба

Если метод возвращает значение NULL, свойство Count завершится ошибкой. Чтобы код оставался кратким, рассмотрите оператор проверки нулевой ссылки «?». Пример «if (data? .Count == 0)....» или классическая нулевая проверка "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


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. Это datagridview в формах?
— Дэвид МакКриммон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.