visual validar not empty check vb.net string nothing

vb.net - validar - string null c#



Nothing=String.Empty(¿Por qué son iguales?) (4)

Es un caso especial de los operadores VB = y <> .

La especificación del lenguaje establece en la sección 11.14:

Al hacer una comparación de cadenas, una referencia nula es equivalente a la cadena literal "".

¿Por qué la primera declaración if se evalúa como verdadera? Sé que si uso "es" en lugar de "=", entonces no se evaluará como verdadero. Si reemplazo String.Empty con "Foo", no se evalúa como verdadero. Tanto String.Empty como "Foo" tienen el mismo tipo de String, entonces ¿por qué uno evalúa a verdadero y el otro no?

//this evaluates to true If Nothing = String.Empty Then End If //this evaluates to false If Nothing = "Foo" Then End If


Nada en VB.net es el valor predeterminado para un tipo. La especificación de idioma dice en la sección 2.4.7:

Nada es un literal especial; no tiene un tipo y es convertible a todos los tipos en el sistema de tipos, incluidos los parámetros de tipo. Cuando se convierte a un tipo particular, es el equivalente del valor predeterminado de ese tipo.

Por lo tanto, cuando prueba contra String.Empty, Nothing se convierte en una cadena, que tiene una longitud 0. El operador Is se debe usar para probar contra Nothing, y String.Empty.Equals (Nothing) también devolverá false.


Prueba esto:

Console.WriteLine("Is String.Empty equal to Nothing?: {0}", String.Empty.Equals(Nothing))

El operador = no impone tipos iguales, mientras que el método .Equals() de un objeto de cadena lo hace, como lo hace el operador Is .


Relacionado con este tema, si usa una variable de cadena inicializada con "nada" para asignarle a la propiedad "valor" de un parámetro SqlParameter, ese parámetro se ignora, no se incluye en el comando enviado al servidor, y se arroja un error de parámetro faltante . Si inicializas esa variable con string.empty todo va bien.

//This doesn''t work Dim myString as String = nothing mySqlCommand.Parameters.Add("@MyParameter", SqlDbType.Char).Value = myString //This works Dim myString as String = string.empty mySqlCommand.Parameters.Add("@MyParameter", SqlDbType.Char).Value = myString