Question

Pourquoi la première instruction if évaluer true? Je sais que si je l'utilise « est » au lieu de « = » alors il ne sera pas évaluée à true. Si je remplace String.Empty avec « Foo » n'évalue pas vrai. Les deux String.Empty et « Foo » ont le même type de chaîne, alors pourquoi un vrai et à évaluer l'autre ne fonctionne pas?

    //this evaluates to true
    If Nothing = String.Empty Then

    End If

    //this evaluates to false
    If Nothing = "Foo" Then

    End If
Était-ce utile?

La solution

Rien dans VB.net est la valeur par défaut pour un type. La spécification de la langue dit dans la section 2.4.7:

  

Rien n'est un littéral spécial; il ne dispose pas d'un type et est convertible à tous les types dans le système de type, y compris les paramètres de type. Lors de la conversion à un type particulier, il est l'équivalent de la valeur par défaut de ce type.

Alors, lorsque vous testez contre String.Empty, rien est converti en une chaîne, qui a une longueur 0. L'opérateur est-il doit être utilisé pour tester contre rien, et String.Empty.Equals (Rien) retournera également faux .

Autres conseils

Essayez ceci:

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

L'opérateur = n'applique pas les types égaux, alors que le .Equals() méthode d'un objet de chaîne ne, comme le fait l'opérateur de Is.

Concernant ce sujet, si vous utilisez une variable de chaîne initialisé avec « rien » à attribuer à la propriété « valeur » d'un SqlParameter ce paramètre est ignoré, non compris dans la commande envoyée au serveur, et un paramètre manquant l'erreur est levée. Si vous initialisez cette variable avec tout String.Empty 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top