তালিকাটি সি # তে খালি আছে কিনা তা পরীক্ষা করুন [বন্ধ]


124

আমার কাছে একটি ডাটাবেস থেকে পপুলেটেড অবজেক্টের একটি তালিকা রয়েছে। তালিকাটি খালি থাকলে আমার ত্রুটি বার্তা প্রদর্শন করতে হবে এবং অন্যথায় গ্রিড ভিউ প্রদর্শন করতে হবে।

List<T>সি # তে একটি ফাঁকা আছে কিনা আমি কীভাবে চেক করব ?


9
তাহলে কি ব্যবহার করে ভুল হয়েছে if (list.Count == 0) { /* ... */ }?
বার্ট ভ্যান নাইরোপ

11
বাif (!list.Any())
থারউইন

10
কেন এই প্রশ্নটি ডাউনভোট করা হয়েছে তা বুঝতে পারি না। আমার জন্য এটি খুব নির্দিষ্ট (বিষয়গুলির তালিকাভুক্ত)। এখানে "অস্পষ্ট" কিছুই নেই। এই প্রশ্নের 30k এর বেশি ভিউ রয়েছে। +1
মার্সেলো বারবোসা

2
প্রশ্নটি নিখুঁত করে তোলে। "তালিকাটি খালি থাকলে আমার একটি ত্রুটি বার্তা প্রদর্শন করা দরকার"। মানব যোগাযোগে মনে রাখবেন, প্রতিটি চরিত্রই গুরুত্বপূর্ণ নয়।
টড পেন্টন

9
এটি # 1 গুগলের ফলাফল C# list isemptyযা এর জন্য এটি সম্পূর্ণ পয়েন্টে। আমি মনে করি প্রশ্নের অপ্রাসঙ্গিক অংশগুলি সম্পাদনা করা উচিত, এবং আমি আবার খুলতে ভোট দিচ্ছি।
ফেলিক্স ডমবাক

উত্তর:


142

কেন না...

bool isEmpty = !list.Any();
if(isEmpty)
{
    // error message
}
else
{
    // show grid
}

GridViewএছাড়াও একটি হয়েছে EmptyDataTemplateযা যদি ডেটাউত্স খালি দেখানো হয়। এটি এএসপি.নেটে একটি পদ্ধতির:

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

<emptydatatemplate>

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

    No Data Found!  

</emptydatatemplate> 

2
দ্রষ্টব্য: দ্বিতীয় পদ্ধতিটি এএসপি.এনইটি অনুমান করে।
টিম শেমলেটার

2
list == nullপ্রথমে চেক করা ভাল না ?
10 ʙᴀᴋᴇʀ

2
@;, var someList = নতুন তালিকা <স্ট্রিং> (); তাড়িত করা হবে (এবং তাই নাল নয়) তবে প্রক্রিয়া করার জন্য উপাদানগুলির শূন্য থাকবে
ডেভিডসোসিত

74

আপনি যে তালিকাটি ব্যবহার করছেন সেটি যদি হয় IEnumerable<T>এবং লিনক একটি বিকল্প হয় তবে আপনি ব্যবহার করতে পারেন Any:

if (!list.Any()) {

}

অন্যথায় আপনার কাছে যথাক্রমে অ্যারে এবং সংগ্রহের ধরণের একটি Lengthবা Countসম্পত্তি থাকে।


10
তাত্ক্ষণিক দ্রষ্টব্য হিসাবে: list.Any এর গণনার চেয়ে অনেক ভাল পারফরম্যান্স রয়েছে।
অ্যাড্রিয়ান লোপেজ

2
@ অ্যাড্রিয়ানলপেজ: আপনি কি এ বিষয়ে বিস্তারিত বলতে পারবেন? বর্তমানের দৈর্ঘ্য বা গণনা ট্র্যাক করে রাখে এমন সংগ্রহের সম্পত্তি যাচাই করার চেয়ে দ্রুততর হতে পারে এমন কোনও জিনিস .Countবা .Lengthসম্পত্তি থাকলে আপনার কী আছে ? আপনার যদি কেবল একটি এনুমरेटर থাকে তবে অবশ্যই তার চেয়ে দ্রুত । আরও দেখুন: stackoverflow.com/questions/305092/... বা stackoverflow.com/questions/5741617/...List.Any().Any().Count() > 0
noox

2
@ নোকস (। নেট কোর) উত্সটি দেখে মনে হচ্ছে, এটি Anyপরীক্ষা করার আগে গণনা পুনরুদ্ধার করা সস্তা, যা আপনার ক্ষেত্রে IListProvider<>গণনা ট্র্যাক করে না এমন ক্ষেত্রে , এটি একবারের পরিবর্তে গণনা করা হবে বলে চেক করে দেখা যাচ্ছে che
নেটমেজ

26
    If (list.Count==0){
      //you can show your error messages here
    } else {
      //here comes your datagridview databind 
    }

আপনি আপনার ডেটাগ্রিডকে মিথ্যা দৃশ্যমান করে অন্য বিভাগে দৃশ্যমান করতে পারেন।


@ নেটমেজ এটি তালিকার পক্ষে কাজ করে না। এটি একটি O(1)অপারেশন এবং উপাদান গণনা করার জন্য কোনও পুনরাবৃত্তি করা হয়নি। দেখুন List<T>.Count
স্পেন্সার ওয়াইকজোরেক

@ স্পেনসারওয়াইজকোরেক আপনি সঠিক, মন্তব্যটি পুরানো পাশাপাশি ভুলও ছিল :) যদিও সাধারণভাবে, আমি এখনও Any()আরও ভাল অভিপ্রায় প্রকাশের পছন্দ করব , পাশাপাশি যখন আপনি জানেন না যে আপনার প্রকৃত আছে তখন আরও পারফরম্যান্ট হওয়া List<T>
নেটমেজ

18

Countসম্পত্তি ব্যবহার সম্পর্কে কি ।

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

3
গণনা একটি সম্পত্তি নয় একটি পদ্ধতি
মোসলেম বেন ধাউ

5
@ মোসলেমবেনডৌউ নির্ভর করে যে এটি লিনক এক্সটেনশন পদ্ধতিটি উন্মোচিত / বলা হচ্ছে, বা বস্তুর স্থানীয় to
গ্র্যান্ট থমাস

@ গ্রান্ট থমাস আমি এটিকে তালিকা <টি> বস্তু হিসাবে নিয়েছি তবে হ্যাঁ আপনি সঠিক are
মোসলেম বেন ধৌ

তালিকার তালিকাগুলি যদি নাল হয়?
সাবরি মেভিş

2
@ সাবরিমিভিş কোনও পদ্ধতি থেকে ফিরে আসা সংগ্রহ / আয়করনযোগ্য / তালিকা কখনই হওয়া উচিত নয় null। পরিবর্তে এটি একটি খালি সংগ্রহ হওয়া উচিত।
জেরোইন ভ্যান ল্যাঞ্জেন

8

আপনার একটি সাধারণ IFবিবৃতি ব্যবহার করা উচিত

List<String> data = GetData();

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

PopulateGrid();
ShowGrid();

সবচেয়ে সহজ এবং সর্বোত্তম উপায় আইএমও।
জবাবা

যদি পদ্ধতিটি শূন্য দেয় তবে গণনা সম্পত্তি ব্যর্থ হবে। কোডটি সংক্ষিপ্ত রাখতে, নাল রেফারেন্স চেক অপারেটরটিকে "?" বিবেচনা করুন। উদাহরণস্বরূপ "যদি (ডেটা?। হিসাব == 0)। ... বা ক্লাসিক নাল চেক "যদি (ডেটা! = নাল && আরও কিছু চুক্তি) ....."
ডেভিডসোসিত

নীচের কোডটি একটি ডটনেটফিডেলে আটকান এবং আপনি সিস্টেমটি দেখতে পাবেন ull নালরফেরেন্স এক্সেপশন: অবজেক্টের রেফারেন্স কোনও অবজেক্টের উদাহরণে সেট করা হয়নি। 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"); } } }
ডেভিডসোসিত


3

গ্রিডভিউতে নিজেই একটি পদ্ধতি রয়েছে যা পরীক্ষা করে যে আপনি যে ডেটা উত্সকে আবদ্ধ করছেন তা খালি রয়েছে, এটি আপনাকে অন্য কিছু প্রদর্শন করতে দেয়।


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>

এটি অত্যন্ত এএসপি.এনইটি নির্দিষ্ট।
গ্র্যান্ট থমাস

আমি উইনফর্মের ছেলেরা নই তবে গ্রিডভিউ এসপ.net নির্দিষ্ট নয়। এটি ফর্ম একটি ডেটাগ্রিডভিউ?
ডেভিড ম্যাকক্রিমমন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.