在学校,我主要使用Java,C和Python。现在我正在工作,我一直在与.Net合作。偶尔我必须处理Visual Basic项目,这是一个愉快的学习经历,但我似乎不时会挂在一些东西上。我的一个主要问题来自于Visual Basic使用Nothing
而不是null
,就像在C#和F#中一样。
Nothing
和null
似乎基本相同,但在Visual Basic中可以将不可为空的值类型设置为Nothing
并且值将为设置为其默认值(即整数为0)。在C#中,如果将非可空值类型设置为null
,则会出现编译时错误。拥有数据类型的默认值但是创建类型Nullable
并将值设置为DBNull.Value
以便使用数据库会让我失望。从Nothing
切换到null
并不直观。我查看了在C#和VB中将字符串设置为null / Nothing的IL代码,并且每次将字符串设置为ldnull时。因此,为什么Visual Basic使用Nothing
代替null
和其他.Net语言一样,有什么潜在的原因吗?
tl; dr为什么Visual Basic使用Nothing
而不是null
?
答案 0 :(得分:3)
请记住,VB是基于原始的Basic,它本来是真正的 BASIC ,很容易被非程序员理解。
如果你试图向非程序员解释一个值是什么,哪个更有意义。
“X的值是无”
或
“X的值为空” - >导致“嗯”?什么是NULL ??
答案 1 :(得分:1)
如果您想在C#中复制nothing
的功能,请尝试使用default(int)
,其中int
是变量的类型。
当类型未知时,通常与泛型一起使用。
答案 2 :(得分:0)
Nothing
是VB6和早期版本的VB中使用的关键字。我不是他们为什么选择这个术语,但是他们将它保留在.NET中,因为它是核心VB语言语法和向后兼容性的一部分。也许最初选择它是因为这对新手来说是一个更简单的术语?