जाँच करें कि क्या सूची C # में बंद है [बंद]


124

मेरे पास डेटाबेस से आबादी वाली वस्तुओं की एक सूची है। यदि सूची खाली है और मुझे ग्रिड दृश्य प्रदर्शित करना है तो मुझे एक त्रुटि संदेश प्रदर्शित करना होगा।

अगर List<T>C # में खाली है तो मैं कैसे जांच करूं ?


9
तो उपयोग करने में क्या गलत है if (list.Count == 0) { /* ... */ }?
बार्ट वैन नीरोप

11
याif (!list.Any())
थरवीन

10
समझ में नहीं आ रहा है कि इस प्रश्न को डाउनवोट क्यों किया गया है। मेरे लिए यह बहुत विशिष्ट है (LIST OF OBJECTS)। यहाँ कुछ भी "अस्पष्ट" नहीं है। इस सवाल के 30k से अधिक विचार हैं। +1
MarceloBarbosa

2
सवाल एकदम सही समझ में आता है। "यदि सूची खाली है तो मुझे एक त्रुटि संदेश प्रदर्शित करना होगा"। मानव संचार में याद रखें, हर चरित्र मायने नहीं रखता।
टॉड पेनटन

9
यह # 1 Google परिणाम भी है C# list isemptyजिसके लिए यह पूरी तरह से बिंदु पर है। मुझे लगता है कि सवाल के अप्रासंगिक भागों को संपादित किया जाना चाहिए, और मैं फिर से मतदान कर रहा हूं।
फेलिक्स डॉमबेक

जवाबों:


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 निर्धारित करता है।
टिम श्मेल्टर

2
क्या यह जांचना सबसे अच्छा नहीं होगा कि list == nullपहले?
ᴍᴀᴛᴛ ᴍᴀᴛᴛ

2
@ @, var someList = नई सूची <string> ();
त्वरित

74

यदि आपके द्वारा उपयोग की जा रही सूची कार्यान्वयन है IEnumerable<T>और Linq एक विकल्प है, तो आप उपयोग कर सकते हैं Any:

if (!list.Any()) {

}

नहीं तो आप आम तौर पर एक है Lengthया Countसरणियों और संग्रह प्रकार पर संपत्ति क्रमशः।


10
त्वरित नोट के रूप में: list.Any गिनती से बेहतर प्रदर्शन किया है।
एड्रियन लोपेज

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 
    }

आप अपने डेटाग्रिड को झूठा दिखा सकते हैं और इसे दूसरे सेक्शन पर दिखा सकते हैं।


@NetMage यह सूची के लिए काम नहीं करता है। यह एक O(1)ऑपरेशन है और तत्वों की गिनती के लिए कोई पुनरावृत्तियों नहीं किया गया है। देख लो List<T>.Count
स्पेंसर Wieczorek

@SpencerWieczorek आप सही हैं, वह टिप्पणी पुरानी होने के साथ-साथ गलत भी थी :) हालांकि सामान्य तौर पर, मैं अभी भी Any()इरादे को बेहतर व्यक्त करना पसंद करूंगा , साथ ही अधिक वास्तविक होने के साथ-साथ आपको पता नहीं होगा कि आपको वास्तविक पता है List<T>
NetMage

18

Countसंपत्ति का उपयोग करने के बारे में क्या ।

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

3
काउंट एक संपत्ति नहीं एक विधि है
मॉसलेम बेन ढौ सिप

5
@MoslemBenDhaou इस बात पर निर्भर करता है कि यह Linq एक्सटेंशन विधि उजागर है / कहा जा रहा है, या ऑब्जेक्ट के मूल निवासी है।
थॉमस

@GrantThomas मैंने इसे एक सूची <T> ऑब्जेक्ट के रूप में लिया, लेकिन हाँ आप सही हैं।
मोसमेल बेन धौ सेप

क्या होगा अगर listOfObjects शून्य है?
साबरी मेविस

2
@ SabriMeviş एक संग्रह / ienumerable / एक विधि से लौटी सूची कभी नहीं होनी चाहिए null। इसके बजाय एक खाली संग्रह होना चाहिए।
जीरो वैन वैन लैंगेन

8

आपको एक साधारण IFकथन का उपयोग करना चाहिए

List<String> data = GetData();

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

PopulateGrid();
ShowGrid();

सरलतम और सबसे अच्छा तरीका IMO।
जबा

यदि विधि शून्य हो जाती है, तो गणना गुण विफल हो जाएगा। कोड को संक्षिप्त रखने के लिए, शून्य संदर्भ जांच ऑपरेटर पर विचार करें "?"। उदाहरण "यदि (डेटा। डेटा == 0)।।" या क्लासिक नल चेक "if (data! = null && someOtherCondition) ....."
daviesdoesit

निम्नलिखित कोड को एक डॉटनेटफिल्ड में पेस्ट करें और आप 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

ग्रिडव्यू में एक विधि है जो यह जांचती है कि यदि आप जिस डेटा स्रोत को इसे खाली कर रहे हैं, वह खाली है, तो यह आपको कुछ और प्रदर्शित करता है।


0

यदि आप ग्रिडव्यू का उपयोग कर रहे हैं तो खाली डेटा टेम्पलेट का उपयोग करें: 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 लोग नहीं हूँ, लेकिन एक ग्रिडव्यू asp.net विशिष्ट नहीं है। यह रूपों में एक datagridview है?
डेविड मैकक्रिमोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.