代码之家  ›  专栏  ›  技术社区  ›  Bob King

什么是混合vb.net选项strict和新选项infer指令的最佳方法?

  •  10
  • Bob King  · 技术社区  · 16 年前

    在一个 related question ,我的团队即将(希望)开始使用Linq,我想利用匿名类型。将vb.net的选项strict(我们在项目生命周期中一直使用的)和新的选项infer指令混合在一起的最佳方法是什么?

    2 回复  |  直到 6 年前
        1
  •  10
  •   Mark Brackett    16 年前

    选项严格且 Option Infer 不要冲突,所以我觉得两个都穿没有什么坏处。

    作为一个样式指南,我更喜欢在每个类文件的顶部放置选项strict、explicit和infer—这可以防止项目或IDE设置之间的差异导致问题,并使它清楚地知道使用了什么设置。

        2
  •  0
  •   jmoreno    6 年前

    Option Strict不能在没有Option Infer的情况下使用,但是Option Infer不能在没有Option Strict的情况下使用,因为这会导致结果IL的差异。

    考虑这一行代码:

    txtBox.Text = If(str="", Nothing, CDate(str))
    

    选项严格关闭和选项推断关闭时,等于:

    txtBox.Text = CStr(If(str="", Nothing, CType(CDate(str), Object)))
    

    如果str=“”,则txtbox.text设置为Nothing/Empty String。

    当Option Infer打开,但Option Strict关闭时,将变为:

    txtBox.Text = Cstr(If(str="", CDate(Nothing), CType(CDate(str), Object)))
    

    和cdate(无)=date.minvalue和so txtbox.text=“01/01/0001”

    选项严格只能使代码不编译,选项推断可以更改其含义。这并不是说地狱可以是一件好事,一般来说,它是一件好事,但是你需要注意一些警告。

    原始代码可以写为:

     txtBox.Text = Cstr(If(str="", Nothing, CDate(str)))
    

    在这种情况下,如果您选择了Option Strict,就不会节省您的钱。推断,但在没有严格的原始版本的代码库中更可能。

    推荐文章