2011-12-19 15 views
27

¿Hay una función en la biblioteca .NET que devuelva verdadero o falso en cuanto a si una matriz es nula o está vacía? (Similar a string.IsNullOrEmpty).IsNullOrEmpty equivalent for Array? C#

He echado un vistazo en la clase Array para una función como esta, pero no pude ver nada.

decir

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

¿Qué pasa con 'if (arr! = Null && arr.Length! = 0)'? O crea un método de extensión si necesitas usar esto repetidamente. –

+3

@CodyGray lo mismo que está mal con cadenas, no quieres hacer eso por todos lados. –

+0

@CodyGray - Estoy de acuerdo, pero puedo ver que se convierta en un dolor escribir si tuviera que escribirlo repetidamente. Tengo un método de extensión en la mayoría de mis proyectos que hace exactamente esto. – Polynomial

Respuesta

36

No hay una ya existente, pero se puede utilizar este método de extensión:

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

Sólo tiene que colocar esto en una clase de extensiones en algún lugar y que va a extender Array tener un método IsNullOrEmpty.

+0

Dadas las variables (a, boc) ¿podría demostrar su uso? La única forma en que puedo ver que funciona es una nueva matriz(). IsNullOrEmpty (a); – maxp

+1

No es necesario el paréntesis. También está anulando el comportamiento normal de lo que sucede cuando llama a un método en una instancia nula, así que le pongo algunos comentarios xml para intellisense. –

+0

@YuriyFaktorovich - Sí, los paréntesis son solo un hábito en realidad. Me parece extraño si combino la lógica sin ellos. Estás en lo correcto con el comportamiento nulo, así que lo actualizaré. – Polynomial

1

No, pero se puede escribir a sí mismo como un método de extensión. O un método estático en su propia biblioteca, si no le gusta llamar a los métodos en un tipo nulo.

22

Se puede crear su propio método de extensión:

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

Realmente me gusta esta respuesta mejor que la mía :) – Polynomial

+0

No creo que esto funcione. –

+0

@YuriyFaktorovich - Acabo de probarlo, funciona perfectamente para mí. – Polynomial

5

más genérico si se utiliza ICollection<T>:

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

En caso de que inicializada matriz como

string[] myEmpytArray = new string[4]; 

A continuación, para comprobar si los elementos de su matriz están vacíos, use

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

Trate

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

Con Null-conditional Operator introducido en VS 2015, lo opuesto es No NullOrEmpty puede ser:

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

pero la versión IsNullOrEmpty parece un poco feo, debido a que el operador precedencia:

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

También puede utilizar Any en la creación de su método de extensión:

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

No se olvide de añadir using System.Linq; en sus declaraciones utilizando.