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