混合VB.NET的Option Strict和新的Option Infer指令的最佳方法是什么?

时间:2008-10-11 16:27:45

标签: vb.net linq option-strict option-infer

related question中,我的团队即将(希望)开始使用LINQ,我想利用匿名类型。混合VB.NET的Option Strict(我们在整个项目的生命周期中使用过)和新的Option Infer指令的最佳方法是什么?

2 个答案:

答案 0 :(得分:10)

选项Strict和Option Infer不冲突,所以我认为两者都没有坏处。

作为样式指南,我更喜欢将Option Strict,Explicit和Infer放在每个类文件的顶部 - 这可以防止项目或IDE设置中的差异导致问题,并清楚地说明使用了哪些设置。

答案 1 :(得分:0)

在没有Option Infer的情况下可以使用Option Strict,但是在没有Option Strict的情况下不能使用Option Infer,因为这会导致最终的IL有所不同。

考虑以下代码行:

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

在“严格禁用”选项和“推断推断”的情况下,等效于:

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

如果str =“”,则txtBox.Text设置为Nothing / empty string。

在“选项推断为开”但“选项严格关闭”的情况下变为:

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

而CDate(Nothing)= Date.MinValue等等txtBox.Text =“ 01/01/0001”

Option Strict只能使您的代码无法编译,Option Infer可以更改其含义。通常,这并不是说Infer并不是一件好事,但是您需要注意一些警告。

原始代码可以写为:

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

在这种情况下,如果您选择Option,则Option Strict不会保存您。推断,但在没有严格限制的代码库中,更可能使用原始版本。