相关疑难解决方法(0)

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

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

linq vb.net option-strict option-infer

10
推荐指数
1
解决办法
2287
查看次数

选项推断开还是关?

可能重复:
最佳实践:选项推断
混合VB.NET的Option Strict和新的Option Infer指令的最佳方法是什么?

我正在开发一个旧的解决方案,从VB6转换为VB.NET.

实际上,文件中的默认选项是

Option Strict On
Option Explicit On
Run Code Online (Sandbox Code Playgroud)

我想使用LINQ,并发现它也更容易使用Option Infer On.

写得少,阅读少(更容易).

然而,(保守的,从我的观点来看)团队的一部分保持Option Infer Off并且坚持不使用它,而没有明确解释原因.

在您看来,使用Option Infer On的"危险"是什么,以及其他两个选项(Strict和Explicit,都是On)?

.net vb.net option-infer

6
推荐指数
2
解决办法
5171
查看次数

C#中的类型推断不起作用?

给出以下C#代码:

var a = new[] {"123", "321", 1}; //no best type found for implicitly typed array
Run Code Online (Sandbox Code Playgroud)

与VB.NET中的对应物:

Dim a = {"123", "321", 1} 'no errors
Run Code Online (Sandbox Code Playgroud)

似乎VB.NET能够正确地推断出a=的类型Object(),而C#会抱怨,直到上面的内容被修复为:

var a = new object[] {"123", "321", 1};
Run Code Online (Sandbox Code Playgroud)

有没有办法在上述场景中自动推断C#中的类型?

编辑:在C#沙箱中使用不同类型后的有趣观察 - 如果所有元素在继承树中具有共同父项,并且该父项不是 a Object,或者如果元素可以转换为更宽泛的类型,则可以正确推断类型(不丢失精度,例如Integer -> Double).所以这两个都可行:

var a = new[] {1, 1.0}; //will infer double[]
var a = new[] {new A(), new B()}; //will infer A[], if B inherits from A
Run Code Online (Sandbox Code Playgroud)

我认为这种行为在C#中是不一致的,因为所有类型都继承自Object,所以它与其他任何类型的祖先都没有太大不同.这可能是一个设计,所以没有必要争论,但如果你知道原因,知道原因会很有趣.

c# vb.net type-inference

5
推荐指数
1
解决办法
285
查看次数

标签 统计

vb.net ×3

option-infer ×2

.net ×1

c# ×1

linq ×1

option-strict ×1

type-inference ×1