在related question中,我的团队即将(希望)开始使用LINQ,我想利用匿名类型。混合VB.NET的Option Strict(我们在整个项目的生命周期中使用过)和新的Option Infer指令的最佳方法是什么?
答案 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不会保存您。推断,但在没有严格限制的代码库中,更可能使用原始版本。