何时使用类型推断

基本上,只要有可能,你就可以使用类型推断。
但是,在组合 Option Infer OffOption Strict Off 时要小心,因为这会导致不希望的运行时行为:

Dim someVar = 5
someVar.GetType.ToString() '--> System.Int32
someVar = "abc"
someVar.GetType.ToString() '--> System.String

匿名类型
匿名类型只能使用 Option Infer On 声明。
在处理 LINQ 时经常使用它们 :

Dim countryCodes = New List(Of String)
countryCodes.Add("en-US")
countryCodes.Add("en-GB")
countryCodes.Add("de-DE")
countryCodes.Add("de-AT")

Dim q = From code In countryCodes
        Let split = code.Split("-"c)
        Select New With {.Language = split(0), .Country = split(1)}
  • 选项推断
    编译器将识别匿名类型: StackOverflow 文档

  • 选项推断关闭
    编译器将抛出错误(使用 Option Strict On
    或将 q 视为类型 object(使用 Option Strict Off)。
    这两种情况都会产生不能使用匿名类型的结果。

双打/小数
默认情况下,带小数位的数字变量将被视为 Double

Dim aNumber = 44.11 '--> Will be treated as type `Double` by the compiler

如果需要像 Decimal 这样的其他类型,则需要标记初始化变量的值:

Dim mDecimal = 47.11D '--> Will be treated as type `Decimal` by the compiler