C# में किसी सूची (List<T>) के null होने की जांच करना महत्वपूर्ण है क्योंकि null सूची पर किसी भी सदस्य (Count, Add(), Any() आदि) को एक्सेस करने पर NullReferenceException फेंका जाता है।
उदाहरण: Null सूची बनाना और जांचना
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
// Null सूची घोषित करें
List nullList = null;
// खाली सूची (तुलना के लिए)
List emptyList = new List();
Console.WriteLine("=== Null सूची ===");
Console.WriteLine($"nullList == null: {nullList == null}"); // True
Console.WriteLine("\n=== खाली सूची ===");
Console.WriteLine($"emptyList == null: {emptyList == null}"); // False
Console.WriteLine($"emptyList.Count: {emptyList.Count}"); // 0
// Null सूची पर ऑपरेशन (अपवाद फेंकेंगे)
Console.WriteLine("\n=== Null सूची पर ऑपरेशन (टिप्पणी हटाकर टेस्ट करें) ===");
// Console.WriteLine(nullList.Count); // NullReferenceException
// Console.WriteLine(nullList.Any()); // NullReferenceException
// nullList.Add("test"); // NullReferenceException
}
}
आउटपुट
=== Null सूची === nullList == null: True === खाली सूची === emptyList == null: False emptyList.Count: 0
Null जांच के सुरक्षित तरीके
1. पारंपरिक null जांच
if (list != null && list.Count > 0)
{
// सूची में तत्व हैं
}
2. Null-conditional ऑपरेटर (?. - C# 6.0+)
int? count = list?.Count; // null यदि list null है, अन्यथा Count bool hasItems = list?.Any() ?? false; // false यदि list null या खाली var first = list?.FirstOrDefault(); // null यदि list null या खाली
3. पैटर्न मिलान (C# 7.0+)
string status = list switch
{
null => "Null सूची",
{ Count: 0 } => "खाली सूची",
_ => $"{list.Count} तत्वों वाली सूची"
};
4. सहायक एक्सटेंशन मेथड
public static class ListExtensions
{
public static bool IsNullOrEmpty(this List list)
=> list == null || list.Count == 0;
public static bool IsNullOrEmpty(this IEnumerable enumerable)
=> enumerable == null || !enumerable.Any();
}
// उपयोग
if (myList.IsNullOrEmpty())
Console.WriteLine("सूची null या खाली है");
पूर्ण तुलनात्मक उदाहरण
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo
{
public static void Main()
{
List nullList = null;
List emptyList = new List();
List populatedList = new List { "A", "B" };
TestList("Null सूची", nullList);
TestList("खाली सूची", emptyList);
TestList("भरी सूची", populatedList);
}
static void TestList(string name, List list)
{
Console.WriteLine($"--- {name} ---");
// 1. सीधा null जांच
Console.WriteLine($" == null: {list == null}");
// 2. Null-conditional Count
Console.WriteLine($" ?.Count: {list?.Count}");
// 3. Null-conditional Any
Console.WriteLine($" ?.Any(): {list?.Any()}");
// 4. ?? ऑपरेटर के साथ डिफॉल्ट
Console.WriteLine($" Count ?? -1: {list?.Count ?? -1}");
Console.WriteLine($" Any() ?? false: {list?.Any() ?? false}");
// 5. पैटर्न मिलान
Console.WriteLine($" स्थिति: {list switch
{
null => "NULL",
{ Count: 0 } => "EMPTY",
_ => $"HAS {list.Count} ITEMS"
}}");
Console.WriteLine();
}
}
आउटपुट
--- Null सूची --- == null: True ?.Count: ?.Any(): Count ?? -1: -1 Any() ?? false: False स्थिति: NULL --- खाली सूची --- == null: False ?.Count: 0 ?.Any(): False Count ?? -1: 0 Any() ?? false: False स्थिति: EMPTY --- भरी सूची --- == null: False ?.Count: 2 ?.Any(): True Count ?? -1: 2 Any() ?? false: True स्थिति: HAS 2 ITEMS
महत्वपूर्ण बिंदु
- Null सूची और खाली सूची अलग अवधारणाएं हैं
- Null सूची = कोई ऑब्जेक्ट आवंटित नहीं; खाली सूची = ऑब्जेक्ट आवंटित लेकिन 0 तत्व
- हमेशा null जांच पहले करें या
?.ऑपरेटर उपयोग करें List<T>एक रेफरेंस प्रकार है, इसलिए null हो सकता है- एपीआई डिजाइन में null के बजाय खाली सूची लौटाना बेहतर अभ्यास है (Null Object Pattern)
??(null-coalescing) ऑपरेटर डिफॉल्ट मान प्रदान करने के लिए उपयोगी