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

nub*_*ela 15 c#

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

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

Joh*_*lla 19

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

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

Foo x;
int i;
Run Code Online (Sandbox Code Playgroud)

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

Foo x = new Foo();
int i = 6;
Run Code Online (Sandbox Code Playgroud)

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

// 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
Run Code Online (Sandbox Code Playgroud)

Dim而不VB相应的类型类似于声明一个类型Object在C#:

object o = ...; // An object instance can hold any value or reference type.
Run Code Online (Sandbox Code Playgroud)


Jar*_*yer 16

假设您的意思是Dim在VB中,C#使用var该类型的名称或声明新类型的名称

string myString = "Hello";
// is the same as
var myString = "Hello"; // type is inferred
Run Code Online (Sandbox Code Playgroud)

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


Tom*_*cek 8

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

// Visual Basic
Dim num as Integer
// C#
int num;
Run Code Online (Sandbox Code Playgroud)

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

// Visual Basic
Dim str = "Hello world"
// C#
var str = "Hello world"
Run Code Online (Sandbox Code Playgroud)

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

// Visual Basic
Dim sth
sth = new Random()
sth.Next()

// C#
dynamic sth;
sth = new Random();
sth.Next();
Run Code Online (Sandbox Code Playgroud)

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

// 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]; 
Run Code Online (Sandbox Code Playgroud)

[/编辑]

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