【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
コメント