VB的Dim与C#的var相同吗?

这是一个小问题:在VB上,我可以使用Dim来声明变量.在C#中,我可以声明然后使用var.我更熟悉C#的复杂性,我知道var使用类型推断来确定变量的类型.但我不知道’Dim’是什么.

我似乎在this question,但它并不比较这两个关键字.如果有区别,有人可以告诉我哪个?

这取决于是否指定了 Option Infer.通常,以下是等效的:
'VB.Net
Dim myVar
Dim myString = "Hello world!"
Dim myString2 As String = "Hello world!"
//C#
object myVar;
object myString = "Hello world!"; //Notice type is object,*not* string!
string myString2 = "Hello world!";

但是,启用了Option Infer,当变量在同一行上初始化时,Dim变得更像var.

'VB.Net
Option Infer On
Dim myVar
Dim myString = "Hello!"
//C#
object myVar;
var myString = "Hello!"; //Or the equivalent:  string myString = "Hello!";

请注意,这可能会导致一些混淆,因为在声明点突然初始化一个变量意味着与以后初始化不同的东西:

'VB.Net
Option Infer On
Dim myVar1
myVar1 = 10
Dim myVar2 = 10

myVar1 = New MyClass() 'Legal
myVar2 = New MyClass() 'Illegal! - Value of type 'MyClass' cannot be converted to 'Integer'

这可以通过启用Option Strict来进行修复,其中(除其他外)强制所有变量在声明时被赋予类型(隐式或不显式).

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...