2011-12-19 41 views
27

Có hàm nào trong thư viện .NET sẽ trả về true hoặc false không biết mảng có rỗng hoặc rỗng không? (Tương tự như string.IsNullOrEmpty).IsNullOrEmpty tương đương với Array? C#

Tôi đã xem trong lớp Array cho một chức năng như thế này nhưng không thể thấy bất kỳ điều gì.

ví dụ:

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

Có gì sai với 'if (arr! = Null && arr.Length! = 0)'? Hoặc tạo một phương thức mở rộng nếu bạn cần sử dụng nó nhiều lần. –

+3

@CodyGray cùng một điều đó là sai với nó cho chuỗi, bạn không muốn làm điều đó trên tất cả các nơi. –

+0

@CodyGray - Tôi đồng ý, nhưng tôi có thể thấy nó trở thành nỗi đau khi viết nếu bạn phải viết nó nhiều lần. Tôi đã có một phương pháp mở rộng trong hầu hết các dự án của tôi mà thực hiện chính xác điều này. – Polynomial

Trả lời

36

Có không phải là một hiện có, nhưng bạn có thể sử dụng phương pháp mở rộng này:

/// <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); 
} 

Chỉ cần đặt này trong một lớp mở rộng ở đâu đó và nó sẽ mở rộng Array để có một phương pháp IsNullOrEmpty.

+0

Với một trong các biến (a, b hoặc c), bạn có thể chứng minh đó là cách sử dụng không? Cách duy nhất tôi có thể thấy nó hoạt động là Mảng mới(). IsNullOrEmpty (a); – maxp

+1

Không cần dấu ngoặc đơn. Ngoài ra bạn đang ghi đè hành vi bình thường của những gì xảy ra khi bạn gọi một phương thức trên một cá thể rỗng, vì vậy tôi sẽ đặt một số nhận xét xml cho intellisense. –

+0

@YuriyFaktorovich - Vâng, dấu ngoặc đơn chỉ là một thói quen thực sự. Cảm thấy khiếp sợ với tôi nếu tôi kết hợp logic mà không có chúng. Bạn đúng về hành vi null, vì vậy tôi sẽ cập nhật. – Polynomial

1

Không, nhưng bạn có thể viết nó cho mình như một phương pháp khuyến nông. Hoặc một phương thức tĩnh trong thư viện của riêng bạn, nếu bạn không thích các phương thức gọi trên một kiểu null.

22

Bạn có thể tạo ra phương pháp mở rộng của riêng bạn:

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

Tôi thực sự thích câu trả lời này tốt hơn tôi :) – Polynomial

+0

Tôi không nghĩ rằng điều này hoạt động. –

+0

@YuriyFaktorovich - Chỉ cần thử nghiệm nó, hoạt động hoàn hảo cho tôi. – Polynomial

5

More generic nếu bạn sử dụng ICollection<T>:

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

Trong trường hợp bạn khởi tạo bạn mảng như

string[] myEmpytArray = new string[4]; 

Sau đó, để kiểm tra nếu các phần tử mảng của bạn đang trống, hãy sử dụng

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

Hãy thử

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

Với Null-conditional Operator giới thiệu trong VS 2015, ngược lại là Không NullOrEmpty có thể là:

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

nhưng phiên bản IsNullOrEmpty trông hơi xấu xí vì các nhà điều hành ưu tiên:

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

Bạn cũng có thể sử dụng Any vào việc tạo ra phương pháp mở rộng của bạn:

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

Đừng quên để thêm using System.Linq; về việc sử dụng các báo cáo của bạn.

Các vấn đề liên quan