Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中运行良好的VB.Net代码中为什么会出现此错误(语法更改后)_C#_Vb.net - Fatal编程技术网

在C#中运行良好的VB.Net代码中为什么会出现此错误(语法更改后)

在C#中运行良好的VB.Net代码中为什么会出现此错误(语法更改后),c#,vb.net,C#,Vb.net,我来自C#背景,现在必须用VB.Net编写代码(新工作) 我正在VB.Net中编写一个代码,它在C#中运行良好(在语法更改后),但在VB.Net中,它给出了一个错误,即数组边界不能出现在类型说明符中 C#代码 TimeSpan yesterday = new TimeSpan(1, 19, 0); DateTime today = new DateTime(2012, 9, 4, 8, 48, 0); DateTime ts = today.Add(new TimeSpan(9, 0, 0)

我来自C#背景,现在必须用VB.Net编写代码(新工作)

我正在VB.Net中编写一个代码,它在C#中运行良好(在语法更改后),但在VB.Net中,它给出了一个错误,即数组边界不能出现在类型说明符中

C#代码

TimeSpan yesterday = new TimeSpan(1, 19, 0);

DateTime today = new DateTime(2012, 9, 4, 8, 48, 0);

DateTime ts = today.Add(new TimeSpan(9, 0, 0)).Subtract(yesterday);
Dim yesterday As New TimeSpan(1, 19, 0)

Dim today As New DateTime(2012, 9, 4, 8, 48, 0)

Dim ts As today.Add(New TimeSpan(9, 0, 0)).Subtract(yesterday)
VB.Net代码

TimeSpan yesterday = new TimeSpan(1, 19, 0);

DateTime today = new DateTime(2012, 9, 4, 8, 48, 0);

DateTime ts = today.Add(new TimeSpan(9, 0, 0)).Subtract(yesterday);
Dim yesterday As New TimeSpan(1, 19, 0)

Dim today As New DateTime(2012, 9, 4, 8, 48, 0)

Dim ts As today.Add(New TimeSpan(9, 0, 0)).Subtract(yesterday)
它在VB代码第三行的
New
下给出了这个错误。我错在哪里

Dim ts As today.Add(New TimeSpan(9, 0, 0)).Subtract(yesterday)
应该是

Dim ts = today.Add(New TimeSpan(9, 0, 0)).Subtract(yesterday)


声明变量时,使用
作为类型说明符

Dim x As Int32
x = 10
Dim x = 10

为同一行上的变量赋值时,可以省略类型说明符

Dim x As Int32
x = 10
Dim x = 10

正因为如此,我一般不会像这样把
当作
新的
混在一起

Dim x As New FooBar() 
我认为这有点令人困惑。我更喜欢

Dim x = New Foobar()

必须显式声明数据类型,尤其是“已知”数据类型。请记住,Visual Basic不区分大小写

Dim ts As datetime = today.Add(New TimeSpan(9, 0, 0)).Subtract(yesterday)
但如果设置了,则可以省略变量的数据类型

Option Infer ON

默认情况下,它是
上的

我不认为,这个问题值得这么多否决票。我同意,这不是一个愚蠢的问题,只是有人试图从c#开发者的角度理解VB。你可能想改用Date关键字而不是DateTime。我个人不喜欢它,但我不情愿这样做,因为这是VB的方式。@SteveDog:但他们不是都是
System.DateTime
的别名吗?@NikhilAgrawal是的,
Date
只是
System.DateTime
的别名,所以两者都可以很好地工作,只是偏好问题。但是,通常建议您在别名可用时使用它们。例如,我确信在C中,您使用了
int
,尽管它只是
Int32
的别名。同样,我希望在VB.NET中编写代码时使用等效的
Integer
别名。就像我说的,我个人不喜欢它。我希望别名根本不存在或不被鼓励,但只要它们存在并受到鼓励,我建议遵守。除非在.NET的最新版本中有所更改,否则省略“as”部分实际上不是一回事,事实上,如果
选项Strict
设置为
On
,则不允许这样做。如果省略“As”,它将创建一个
对象
,而不进行类型检查。当然,这有时可能是您想要的,但通常不是。@SteveDog No.您可以省略
As
部分,编译器将推断出正确的类型。@SteveDog您当然可以禁用
选项推断
,那么您就对了。但是为什么会有人想这样做呢?:-)你知道这是什么时候改变的吗?我在工作中因为一些莫名其妙的原因被困在VS2005中,所以我很好奇…@SteveDog
Option-Infer
是在2008年添加的,而不是2010-1您不必显式声明数据类型-这就是
Option-Infer
的全部内容
Dim ts=today.Add(新的时间跨度(9,0,0)).Subtract(昨天)
非常有效