10

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

4

2 回答 2

10

Option Strict 和Option Infer并不冲突,所以我认为两者都打开没有什么坏处。

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

于 2008-10-11T16:45:39.780 回答
0

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

考虑这行代码:

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

使用 Option Strict Off 和 Option Infer Off 时,相当于:

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

如果 str="" 则 txtBox.Text 设置为 Nothing/空字符串。

使用 Option Infer On 但 Option Strict Off 时:

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 将无法拯救您。Infer On,但在没有 Strict 的代码库中,原始版本的可能性更大。

于 2019-01-19T12:09:48.680 回答