在C#中VB的“Dim”语句相当于什么?


What is the equivalent of VB's “Dim” statement in C#?

拿起C#,似乎找不到任何有用的参考,除了例子。

那么,C#中的Dim是什么?


在VB中,Dim声明一个特定类型的变量(或变量类型的变量,如果你没有指定一个)。如果Dim x as Foo,则声明一个名为xFoo类型的变量。

在C#中,等效的是声明类型后跟变量的名称,如:

1
2
Foo x;
int i;

您也可以在同一步骤中指定:

1
2
Foo x = new Foo();
int i = 6;

C#支持类型推断,所以你也可以这样做:

1
2
3
// Compiler infers type of x and i based on this assignment.
var x = new Foo(); // x is now of type Foo
var i = 10;        // i is now of type int

VB中没有相应类型的Dim类似于在C#中将类型声明为Object

1
object o = ...; // An object instance can hold any value or reference type.


假设您在VB中表示Dim,C#使用var或类型名称来声明新类型

1
2
3
string myString ="Hello";
// is the same as
var myString ="Hello"; // type is inferred

请注意,var关键字不是变体类型,就像在VB中一样。它是一个隐式类型变量。


这实际上有点棘手,因为Dim可以以多种方式使用。第一种情况是在声明变量时明确提供变量的类型。在这种情况下,它对应于包含类型名称的C#声明:

1
2
3
4
// Visual Basic
Dim num as Integer
// C#
int num;

第二种情况是使用初始化表达式,但不明确指定类型。在这种情况下,VB(至少是最新版本)使用类型推断来推断类型。这对应于C#var关键字:

1
2
3
4
// Visual Basic
Dim str ="Hello world"
// C#
var str ="Hello world"

最后,还有第三种情况 - 您可以声明Visual Basic变量而不提供任何类型并且不提供初始化表达式(至少在Option Strict关闭时)。在这种情况下,VB.NET将变量声明为类型Object的值,但也允许您调用该对象的任何方法。这与C#4.0对新的dynamic关键字的作用非常接近:

1
2
3
4
5
6
7
8
9
// Visual Basic
Dim sth
sth = new Random()
sth.Next()

// C#
dynamic sth;
sth = new Random();
sth.Next();

[编辑]
最后,在Visual Basic中使用Dim的最后一种情况是声明数组。在C#中,数组被视为另一种数据类型,因此声明类似于我之前为整数/字符串编写的声明:

1
2
3
4
5
6
// Visual Basic
Dim ints(10, 10) as Integer
// C# - we need to initialize the array if size is specified
int[,] ints = new int[10, 10];
// C# - we can use type inference too
var ints = new int[10, 10];

[/编辑]

(我不是VB专家,但我认为这是三种可能的情况。如果我错了,请纠正我!)


类似的等价物就像

1
object Obj;

或任何其他数据类型,如

1
2
int myInt;
string myString;

var也可以用作隐式类型。其他人将被明确键入。 var虽然是为LINQ查询引入的。


我可以建议学习C#3.0(以及后来,可能是Nutshell中的C#3.0和深度中的C#)来学习C#。学习语言基础并开始"用C#思考"可能是一个好主意,而不是试图将你的想法从VB翻译或"转换"到C#(或任何其他语言)。

编辑:那说;你确实希望将你正在学习的新语言与你已经知道的语言进行比较,以了解语言之间的差异。在我看来,在学习一门新语言时,更多的是掌握原则和基本差异:)


Dim是用于声明VB.NET中使用的变量的关键字。我不知道C#中的任何用法。我会说它的(粗略的)等价物是var关键字,只要我们讨论的是VB 9和C#3。但是我认为在我们知道什么是预期的问题之前进入有关细节的斗争是没有用的;)