2012-03-14 20 views
5

Quiero eliminar la primera línea:String.IsNullOrEmpty utilizando Trim()

    !string.IsNullOrEmpty(cell.Text) 

se esta causa ningún problema?

me encontré con esto en algún código:

   if ((id % 2 == 0) 
        && !string.IsNullOrEmpty(cell.Text) 
        && !string.IsNullOrEmpty(cell.Text.Trim()) 
        ) 

Creo que la primera String.IsNullOrEmpty volvería falsa en una cadena con espacios
y la línea con el ajuste() se encarga de eso, por lo que la primero IsNullOrEmpty es inútil

Pero antes de quitar la línea sin el recorte, pensé que la ejecutaba el grupo.

+2

quiere decir string.IsNullOrWhitespace – nothrow

+0

¿Es muy difícil de probar o para buscar el documentación oficial? (http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx). Respuesta corta: No, una cadena de espacios no es nula o está vacía. – madth3

+3

Ustedes están perdiendo el punto. Sí, puede usar 'IsNullOrEmpty', pero el OP está confundido sobre por qué es necesaria la primera llamada para evitar una' NullReferenceException'. Comprender eso es mucho más importante que cambiar a una llamada a un método diferente porque se le dijo que lo hiciera. –

Respuesta

4

La primera IsNullOrEmpty capta los valores nulos antes de que lanzan una NullReferenceException con el ajuste() .

Sin embargo, hay una manera mejor:

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+2

Solo disponible en .NET Framework 4 y posterior. – Chris

12

si cell.Text es nulo, tendría una excepción sin ese primer control.

+3

si la celda es un TextBox, esa propiedad nunca será nula. – code4life

+0

que también se puede lograr con 'cell.Text! = Null && cell.Text.Trim()! =" "' Si aún tiene .NET <.NET 4.0. –

+0

NOTA: cell es el contenido de la celda de la tabla html adquirida usando WebDriver (pero ese no es el punto de la pregunta) –

8

En .NET 4.0:

if (id % 2 == 0 && !string.IsNullOrWhiteSpace(cell.Text)) 
{ 
    ... 
} 

En las versiones más antiguas que debe tener las dos pruebas, porque si se quita la primera y cell.Text es nulo, obtendrá un NRE en el segundo cuando intenta invocar .Trim en una instancia nula

O también se puede hacer esto:

if (id % 2 == 0 && string.IsNullOrWhiteSpace((cell.Text ?? string.Empty).Trim())) 
{ 
    ... 
} 

o incluso mejor, se podría escribir un extension method para el tipo de cadena que va a hacer esto para que usted podría simplemente:

if (id % 2 == 0 && !cell.Text.IsNullOrWhiteSpace()) 
{ 
    ... 
} 

que podría mira esto:

public static class StringExtensions 
{ 
    public static bool IsNullOrWhiteSpace(this string value) 
    { 
     return string.IsNullOrEmpty((value ?? string.Empty).Trim()); 
    } 
} 
+0

No creo que un método de extensión sea mejor en esta situación. Como regla general, "no acepte null como un parámetro de método de extensión válido". Otros programadores podrían interpretar esto como 'El texto debe tener un valor porque se podría llamar a un método'. –

0

Creo que la prueba es para asegurar que cell.text no sea nulo primero ... si es así, intentar eludirlo y obtener solo cell.text.trim() se ahogaría ya que no se puede hacer un recorte en una cadena nula.

0

¿Por qué no utilizar !string.IsNullOrWhitespace(call.Text) y soltar las dos verificaciones anteriores?

0

No se puede eliminar solo la primera IsNullOrEmpty como la celda. El texto podría ser nulo y, por lo tanto, llamar a Trim en él arrojaría una excepción. Use IsNullOrWhiteSpace si está utilizando .Net 4.0 o deje ambos controles.

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+0

Sí, pero esto no responde la pregunta. Obviamente, el OP está confundido acerca de cómo se evalúan las expresiones de declaración if. –

+0

Actualizado. Gracias. –

0

Si cell.Text es nulo, el String.IsNullOrEmpty expresión (cell.Text.Trim()) lanzará una excepción, ya que está intentando ejecutar el método Trim() en la célula.

Mucho más readble si la condición sería:!! = Null cell.Text & & cell.Text.Trim() = ""

0

puede utilizar el método de extensión de esta manera:

/// <summary> 
/// Indicates whether the specified string is null or empty. 
/// This methods internally uses string.IsNullOrEmpty by trimming the string first which string.IsNullOrEmpty doesn't. 
/// .NET's default string.IsNullOrEmpty method return false if a string is just having one blank space. 
/// For such cases this custom IsNullOrEmptyWithTrim method is useful. 
/// </summary> 
/// <returns><c>true</c> if the string is null or empty or just having blank spaces;<c>false</c> otherwise.</returns> 
public static bool IsNullOrEmptyWithTrim(this string value) 
{ 
    bool isEmpty = string.IsNullOrEmpty(value); 
    if (isEmpty) 
    { 
     return true; 
    } 
    return value.Trim().Length == 0; 
} 
Cuestiones relacionadas