为什么VB.Net类型推断不能在类字段中工作?

时间:2013-06-03 15:25:32

标签: vb.net visual-studio variables field type-inference

如果我在方法体中键入以下内容:

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和编译器如何处理类型推断之间是否存在差异?另一方面,如果编译器无法在这种情况下推断类型,为什么方法变量和类字段之间存在差异?

1 个答案:

答案 0 :(得分:3)

你发现的是有目的的。这是MSDN expalanation。

  

本地类型推断适用于程序级别。它不能用来   在模块级别声明变量(在类,结构,模块中,   或接口,但不在程序或块内)。如果是num2   前面的示例是类的字段而不是局部变量   在一个过程中,声明会导致Option出错   严格打开,并将num2归类为具有Option Strict的Object   关闭。同样,本地类型推断不适用于过程级别   变量声明为静态。