な=文字列になります。空(なぜこれらの同?)
質問
なぜ最初のif文を評価する。知っていれば使用"は、""の代わりに"="ではな評価します。に交換すれば文字列になります。空には"Foo"な評価します。両方の文字列になります。空および"Foo"と同じタイプの文字列、理由は一体なんだろう?一の評価をtrueにしない?
//this evaluates to true
If Nothing = String.Empty Then
End If
//this evaluates to false
If Nothing = "Foo" Then
End If
解決
VB.netで何もタイプのデフォルト値ではありません。 言語仕様のは、セクション2.4.7に述べています:
あなたがString.Emptyのに対してテスト時に何も特別なリテラルです。それはタイプがあり、タイプパラメータを含む型システム内のすべての種類、に変換されていません。特定の型に変換すると、そのタイプのデフォルト値と同等である。
そうは、何もまた、偽を返しますオペレータがNothingに対してテストするために使用すべきである長さ0、およびString.Empty.Equals(Nothing)を持っている文字列に変換されますます。
他のヒント
この特別な場合のVB =
や <>
います。
の 言語仕様 国第11.14:
の際は文字列比較の場合、nullを参考に相当は、文字列リテラル"".
ご興味のある方には向いて書いて深の比較 vbNullString
, String.Empty
, ""
や Nothing
にVB.NET こちら:
これを試してみてください
Console.WriteLine("Is String.Empty equal to Nothing?: {0}", String.Empty.Equals(Nothing))
=
オペレータは .Equals()
に対し、同じタイプを強制しません> Is
オペレータが行うように、文字列オブジェクトのメソッドは、行います。
このトピックに関連して、あなたはパラメータは無視されていることをSqlParameterのプロパティ「値」に割り当てる「何も」で初期化された文字列変数を使用する場合は、コマンドに含まれていないサーバーに送信され、欠落しているパラメータエラーがスローされます。 あなたがString.Emptyのすべてに、その変数を初期化した場合は罰金になります。
//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