C #에서 목록이 비어 있는지 확인 [닫힘]


125

데이터베이스에서 채워진 개체 목록이 있습니다. 목록이 비어 있으면 오류 메시지를 표시하고 그렇지 않으면 그리드보기를 표시해야합니다.

List<T>C #에서 a 가 비어 있는지 어떻게 확인 합니까?


9
그래서 사용하는 것이 잘못된 것은 무엇 if (list.Count == 0) { /* ... */ }입니까?
Bart van Nierop 2013 년

11
또는if (!list.Any())
Tharwen 2013 년

10
이 질문이 반대 투표 된 이유를 이해할 수 없습니다. 저에게는 매우 구체적입니다 (객체 목록). 여기에 "불분명 한"것은 없습니다. 이 질문의 조회수는 3 만 개가 넘습니다. +1
MarceloBarbosa 2015 년

2
질문은 완벽합니다. "목록이 비어 있으면 오류 메시지를 표시해야합니다." 인간의 의사 소통에서 모든 캐릭터가 중요한 것은 아닙니다.
Todd Painton 2015 년

9
이것은 또한 C# list isempty완전히 정점에 있는 # 1 Google 결과입니다 . 질문의 관련없는 부분은 수정해야한다고 생각하며 다시 열도록 투표하겠습니다.
Felix Dombek

답변:


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먼저 확인하는 것이 최선이 아닐까요?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
@ ᴍᴀᴛᴛʙᴀᴋᴇʀ, var someList = new List <string> (); 인스턴스화되지만 (따라서 null이 아님) 처리 할 요소가 비어 있습니다.
daviesdoesit

74

사용중인 목록 구현이 IEnumerable<T>있고 Linq가 옵션 인 경우 다음을 사용할 수 있습니다 Any.

if (!list.Any()) {

}

그렇지 않으면 일반적으로 배열 및 컬렉션 유형에 각각 Length또는 Count속성이 있습니다.


10
빠른 메모 : list. Any는 count보다 성능이 훨씬 뛰어납니다.
Adrian Lopez

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 2011

@SpencerWieczorek 맞습니다. 그 댓글은 오래되고 잘못되었습니다. :) 일반적으로 Any()의도를 더 잘 표현하고 실제 List<T>.
NetMage

18

Count속성 사용은 어떻습니까?

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

3
카운트 속성을하지 않는 방법입니다
이슬람교 벤 Dhaou

5
@MoslemBenDhaou Linq 확장 메서드가 노출 / 호출되는지 또는 개체에 고유한지 여부에 따라 다릅니다.
그랜트 토마스

@GrantThomas 나는 그것을 List <T> 개체로 취했지만 네 맞습니다.
Moslem Ben Dhaou 2013 년

listOfObjects가 null이면 어떻게 되나요?
Sabri Meviş

2
@ SabriMeviş 메서드에서 반환 된 컬렉션 / ienumerable / list는 절대 null. 대신 빈 컬렉션이어야합니다.
Jeroen van Langen

8

간단한 IF문장을 사용해야합니다

List<String> data = GetData();

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

PopulateGrid();
ShowGrid();

가장 간단하고 가장 좋은 방법 IMO.
Jabba

메서드가 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/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입니까?
David MacCrimmon 2013 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.