mad*_*lor 5 .net vb.net syntax
重复
很遗憾,我不知道这一点,但任何人都可以解释之间的区别:
Dim X as New Y
Run Code Online (Sandbox Code Playgroud)
和
Dim X as Y = New Y()
Run Code Online (Sandbox Code Playgroud)
    Jon*_*eet 13
第一个只是推断出类型是Y.第二个指定它.这允许你写下这样的东西:
Dim X as IList(Of String) = New List(Of String)
Run Code Online (Sandbox Code Playgroud)
然后限制了使用选择的范围List(Of String)- 这意味着稍后您可能会选择使用不同的实现IList(Of String),并且它仍然会编译.
当然,较短的版本确实具有简洁的好处 - 如果您有很长的类型名称(例如使用嵌套泛型),这可能很重要.它也是匿名类型所必需的,你无法表达X的类型.
Jon Skeet已经提供了正确的答案,但我想我会增加一些额外的...
虽然这不是你的具体问题,但是它们之间存在着重要的区别
Dim X = New Y()
Run Code Online (Sandbox Code Playgroud)
和
Dim X As Y = New Y()
Run Code Online (Sandbox Code Playgroud)
这里的差异实际上取决于您使用的VB.NET版本.
VB.NET 7和8
Dim X = New Y()
Run Code Online (Sandbox Code Playgroud)
这定义X为type object(System.Object)的变量,然后创建一个类型的对象Y并将其赋值给X.请注意,这仅在您定义时才有效Option Strict Off,否则甚至无法编译.它实际上只是VB6及更早版本语法的结转,而且通常是气馁的.
Dim X as Y = New Y()
Run Code Online (Sandbox Code Playgroud)
这完全相同,除了X现在是强类型的,换句话说它是类型Y而不是object(所有类型都从中继承,包括盒装时的值类型).
VB.NET 9及其后的版本
Dim X = New Y()
Run Code Online (Sandbox Code Playgroud)
这里的差异(对于较新版本的VB.NET)是类型推断在这里生效.因为你没有指定任何类型,但是对于New Y()返回类型实例的编译器来说很明显Y,它会自动推断出X应该是的类型,它Y比对象更具体.类型干扰也适用于更复杂的表达式.
Dim X as Y = New Y()
Run Code Online (Sandbox Code Playgroud)
这与在VB.NET 7和8中完全相同.
总之,您可以有效地替换
Dim X As New Y()
Run Code Online (Sandbox Code Playgroud)
同
Dim X = New Y()
Run Code Online (Sandbox Code Playgroud)
在VB.NET 9中,由于类型推断,编译器会将这两行完全相同地解释.但是,在早期版本中,第二行将是弱类型(类型object),这是不可取的.同样,这不是问题的直接答案,但我认为这可能有助于指出.