2011-12-19 10 views
27

क्या .NET लाइब्रेरी में कोई फ़ंक्शन है जो सच या गलत लौटाएगा कि कोई सरणी शून्य या खाली है या नहीं? (String.IsNullOrEmpty के समान)।IsNullOrEmpty ऐरे के बराबर है? सी #

मैंने इस तरह के एक समारोह के लिए Array कक्षा में एक नज़र डाली थी लेकिन कुछ भी नहीं देख सका।

अर्थात

var a = new string[]{}; 
string[] b = null; 
var c = new string[]{"hello"}; 

IsNullOrEmpty(a); //returns true 
IsNullOrEmpty(b); //returns true 
IsNullOrEmpty(c); //returns false 
+1

'if (arr! = Null && arr.Length! = 0) 'के साथ क्या गलत है? या यदि आपको इसे बार-बार उपयोग करने की आवश्यकता है तो एक विस्तार विधि बनाएं। –

+3

@ कोडीग्रे एक ही चीज़ जो तारों के लिए गलत है, आप उस जगह पर ऐसा नहीं करना चाहते हैं। –

+0

@ कोडीग्रे - मैं सहमत हूं, लेकिन अगर आप इसे बार-बार लिखना चाहते हैं तो मैं इसे लिखने में दर्द महसूस कर सकता हूं। मेरे पास मेरी अधिकांश परियोजनाओं में एक विस्तार विधि है जो वास्तव में यह करता है। – Polynomial

उत्तर

36

वहाँ एक मौजूदा एक नहीं है, लेकिन आप इस विस्तार विधि का उपयोग कर सकते हैं:

/// <summary>Indicates whether the specified array is null or has a length of zero.</summary> 
/// <param name="array">The array to test.</param> 
/// <returns>true if the array parameter is null or has a length of zero; otherwise, false.</returns> 
public static bool IsNullOrEmpty(this Array array) 
{ 
    return (array == null || array.Length == 0); 
} 

बस कहीं एक एक्सटेंशन कक्षा में इस जगह है और यह Array बढ़ा देंगे एक IsNullOrEmpty विधि है।

public static bool IsNullOrEmpty<T>(this T[] array) 
{ 
    return array == null || array.Length == 0; 
} 
+0

किसी भी चर (ए, बी या सी) को देखते हुए क्या आप इसका उपयोग प्रदर्शित कर सकते हैं? एकमात्र तरीका जिसे मैं इसे देख सकता हूं वह नया ऐरे() है। IsNullOrEmpty (ए); – maxp

+1

ब्रांड्स के लिए कोई ज़रूरत नहीं है। इसके अलावा आप सामान्य व्यवहार को ओवरराइड कर रहे हैं जब आप किसी नल इंस्टेंस पर कोई विधि कॉल करते हैं, तो मैं इंटेलिजेंस के लिए कुछ एक्सएमएल टिप्पणियां डालूंगा। –

+0

@YuriyFaktorovich - हाँ, कोष्ठक वास्तव में बस एक आदत है। अगर मैं उनके बिना तर्क जोड़ता हूं तो मुझे डर लगता है। आप शून्य व्यवहार पर सही हैं, इसलिए मैं अपडेट करूंगा। – Polynomial

1

नहीं है, लेकिन आप इसे अपने आप को एक विस्तार पद्धति के रूप में लिख सकते हैं। या यदि आप एक नल प्रकार पर कॉलिंग विधियों को पसंद नहीं करते हैं, तो अपनी खुद की लाइब्रेरी में एक स्थिर विधि।

22

आप अपनी खुद की विस्तार विधि बना सकते हैं

public static bool IsNullOrEmpty<T> (this ICollection<T> collection) 
{ 
    return collection == null || collection.Count == 0; 
} 
+4

मुझे वास्तव में मेरा जवाब बेहतर से पसंद है :) – Polynomial

+0

मुझे नहीं लगता कि यह काम करता है। –

+0

@YuriyFaktorovich - बस इसका परीक्षण किया, मेरे लिए पूरी तरह से काम करता है। – Polynomial

5

अधिक जेनेरिक अगर आप ICollection<T> का उपयोग करें::

1

मामले में आप की तरह

string[] myEmpytArray = new string[4]; 

तो फिर तुम सरणी जाँच करने के लिए प्रारंभ यदि आपके सरणी तत्व खाली हैं

myEmpytArray .All(item => item == null) 

प्रयास करें

public static bool IsNullOrEmpty<T> (this ICollection<T> collection) 
{ 
    if (collection == null || collection.Count == 0) 
     return true; 
    else 
     return collection.All(item => item == null); 
} 
9
Null-conditional Operator वी.एस. 2015 में शुरू की के साथ

, विपरीत नहीं NullOrEmpty हो सकता है:

if (array?.Length > 0) {   // similar to if (array != null && array.Length > 0) { 

लेकिन IsNullOrEmpty संस्करण ऑपरेटर की वजह से थोड़ा बदसूरत लग रहा है प्राथमिकता:

if (!(array?.Length > 0)) { 
1

आप भी अपने विस्तार विधि बनाने पर Any उपयोग कर सकते हैं:

public static bool IsNullOrEmpty<T>(this T[] array) where T : class 
    { 
     return (array == null || !array.Any()); 
    } 

अपने बयान के प्रयोग पर using System.Linq; जोड़ने के लिए मत भूलना।

संबंधित मुद्दे