[VB] Nothing と比較すると、どうなるか?
VB の Nothing は、 C# とかの null とは違うのだ。 null 判定するには、 Is Nothing を使うのだ …と思い込んでるから、 比較演算子を使われたコードを読んでても、 しばらく気付かなかったわ。 f(^^;
てことで、 問題。
次のコードの出力を答えてください。 正解できたあなたには、VB マイスターの称号をお贈りしませうw
Dim
s1 As String = Nothing
If
(s1 = Nothing) Then
Call Console.WriteLine("String
の Nothing は Nothing と等しいです。")
Else
Call Console.WriteLine("String
の Nothing は Nothing と等しくありません。")
End If
Dim
s2 As String = String.Empty
If
(s2 = Nothing) Then
Call Console.WriteLine("String.Empty
は Nothing と等しいです。")
Else
Call Console.WriteLine("String.Empty
は Nothing と等しくありません。")
End If
Dim
n1 As Integer =
0
If
(n1 = Nothing) Then
Call Console.WriteLine("Integer
の 0 は Nothing と等しいです。")
Else
Call Console.WriteLine("Integer
の 0 は Nothing と等しくありません。")
End If
Dim
n2 As Integer =
1
If
(n2 = Nothing) Then
Call Console.WriteLine("Integer
の 1 は Nothing と等しいです。")
Else
Call Console.WriteLine("Integer
の 1 は Nothing と等しくありません。")
End If
Dim
d1 As DateTime = DateTime.Today
If
(d1 = Nothing) Then
Call Console.WriteLine("DateTime.Today
は Nothing と等しいです。")
Else
Call Console.WriteLine("DateTime.Today
は Nothing と等しくありません。")
End If
Dim
d2 As DateTime = New
DateTime()
If
(d2 = Nothing) Then
Call Console.WriteLine("New
DateTime() は Nothing
と等しいです。")
Else
Call Console.WriteLine("New
DateTime() は Nothing
と等しくありません。")
End If
Visual Studio 2008 で実行した結果は、次のようになりました。 (白文字)
String の Nothing は Nothing と等しいです。
String.Empty は Nothing と等しいです。
Integer の 0 は Nothing と等しいです。
Integer の 1 は Nothing と等しくありません。
DateTime.Today は Nothing と等しくありません。
New DateTime() は Nothing と等しいです。
# やっぱさぁ、 VB のほうが難しいんだってば!!
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント
NothingはIsで比較するものだとばかり。。。
この動作は知らなかった。。。
投稿: karuakun | 2011年10月14日 (金) 09時03分
> DateTimeで一瞬迷いましたが、何となく納得。
ぉお、 さすがです。 フレームワークを VB でガンガン作ってきた人は違う!
> Nothingに初期値にようなものとか意味不明です…(汗)。
Nothing は C# の default(T) だと思ってもらえれば。
それよりも、
If (String.Empty = Nothing) Then
がコンパイルされると、 String の == 演算子の呼び出しじゃなくて、 String.Compare() メソッドの呼び出しになっちゃうほうが不気味かも f(^^;
投稿: biac | 2011年3月25日 (金) 06時59分
DateTimeで一瞬迷いましたが、何となく納得。
Nothingに初期値にようなものとか意味不明です…(汗)。
投稿: D.K. | 2011年3月25日 (金) 01時53分