【VB.NET】Nothing とはなにか
英語の訳としては、「何も…ない」 という意味です。
Nothing は、厳密に言えば文字列型の String の””(空文字)とは違いますが、価値的には同じです。
Nothing は、厳密に言えば値型の Integer の 0 とは違いますが、価値的には同じです。
どちらも無いです。
String型(参照型)とNothing
Nothing は、厳密に言えば文字列型の String の””(空文字)とは違いますが、価値的には同じです。
サンプルコード
Module Module1
Sub Main()
Dim str As String = ""
Console.WriteLine(str.Equals(Nothing)) 'False
Console.WriteLine(str Is Nothing) 'False
Console.WriteLine(str = Nothing) 'True
End Sub
End Module
Integr型(値型)とNothing
数字型(値型)の Integer の 0 と厳密に言えば違うものですが、価値的には同じです。
Module Module1
Sub Main()
Dim num As Integer
Console.WriteLine(num.Equals(Nothing)) 'True
'Console.WriteLine(num Is Nothing) '参照型または、Null許容型でない為 NG
Console.WriteLine(num = Nothing) 'True
End Sub
End Module
これは、値型に Nothing を 設定すると 暗黙的に 0 が設定されることからもわかるように値型の Nothingと 0 は同じ価値があります。
Dim num As Integer = Nothing
Console.WriteLine(num) '0
数値型に Nothing を許容したい場合は、型指定の際に “?” を付けると Nothing を入れられるようになります。
Module Module1
Sub Main()
Dim num As Integer? = Nothing
Console.WriteLine(num.Equals(0)) 'False
Console.WriteLine(num.Equals(Nothing)) 'True
Console.WriteLine(num Is Nothing) 'True
num = 0
Console.WriteLine(num.Equals(0)) 'True
Console.WriteLine(num.Equals(Nothing)) 'False
Console.WriteLine(num Is Nothing) 'False
End Sub
End Module
コメント