如果我在方法体中键入以下内容:
Dim myInt = 1
Visual Studio IDE(因此,我猜,编译器)将myInt
的类型推断为Integer
。
修改
显然,在这里使用文字是一个糟糕的选择,因为我卷入了与这个问题毫无关系的冗长辩论。如果您对表达式1
可能被解释为不同数字类型的实例这一事实提出异议,请假装我写了:
Dim myInstance = New MyClass()
结束编辑
但是,当我在类的顶部放置具有完全相同代码的字段声明时,不会推断出myList
的类型:
Public Class Foo
Dim myInt = 1
End Class
在鼠标悬停时,它提到没有As子句,并且假设已经假定了一种Object。我不能将myInt
作为参数传递给需要Integer参数的函数或子函数,而不显式添加As子句或转换为Integer。
IDE和编译器如何处理类型推断之间是否存在差异?另一方面,如果编译器无法在这种情况下推断类型,为什么方法变量和类字段之间存在差异?
答案 0 :(得分:3)
你发现的是有目的的。这是MSDN expalanation。
本地类型推断适用于程序级别。它不能用来 在模块级别声明变量(在类,结构,模块中, 或接口,但不在程序或块内)。如果是num2 前面的示例是类的字段而不是局部变量 在一个过程中,声明会导致Option出错 严格打开,并将num2归类为具有Option Strict的Object 关闭。同样,本地类型推断不适用于过程级别 变量声明为静态。