Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 最佳实践:选项推断_Vb.net_Visual Studio 2008_Option Infer - Fatal编程技术网

Vb.net 最佳实践:选项推断

Vb.net 最佳实践:选项推断,vb.net,visual-studio-2008,option-infer,Vb.net,Visual Studio 2008,Option Infer,您认为在您的项目中使用Option Infert的最佳实践是什么 在VisualStudio2008中,Option Infer是一个指令,允许编译器通过查看分配给它的内容来推断声明变量的数据类型 这是VS2008中的一个关键特性,广泛用于LINQ语句和查询。但是,启用Option Infer可能会给未来的维护程序员带来陷阱。我认为这是一个安全的选项,因为您无法跨越方法边界传递“Var”类型。我不太喜欢VB或Javascript变体类型,但C#中的Var非常方便。如果您计划使用Linq,我不会关

您认为在您的项目中使用Option Infert的最佳实践是什么

在VisualStudio2008中,Option Infer是一个指令,允许编译器通过查看分配给它的内容来推断声明变量的数据类型


这是VS2008中的一个关键特性,广泛用于LINQ语句和查询。但是,启用Option Infer可能会给未来的维护程序员带来陷阱。

我认为这是一个安全的选项,因为您无法跨越方法边界传递“Var”类型。我不太喜欢VB或Javascript变体类型,但C#中的Var非常方便。如果您计划使用Linq,我不会关闭该选项


--Matt

C#(因此我认为其他.net语言)使用的类型推断非常精确(而且非常优秀)。编译器仅在类型清晰明确时才允许使用该语句。因此,结果并不是真正的精度损失。。。这仅仅是为了避免开发人员多次声明类型。您正在减少代码中的重复

(编辑:另外,重要的是要意识到结果仍然是强类型的。。编译器在编译时知道变量的确切类型。没有任何变量像变量那样。如果键入
var x=42;
,它只会指出x是int,因为在t上加了int他把它放在右手边,这样就节省了一些打字和复印工作)

未来的维护程序员可能不理解它的唯一原因是如果他们根本不理解类型推断的语言特性。但我认为,期望和要求维护程序员知道语言特性比避免好的语言特性更合理,因为他们担心未来的程序会他们不会知道的


我猜如果你处在一个“强”>“知/强”的情况下,未来的程序员是低级的,对语言不太了解,那么也许你会避免一些事情。但是这让我怀疑你是否应该考虑其他语言,或者甚至是一个“Access”平台,它是“真正的编程”的混合体。还有一些非程序员可以做的事情。

以下是我的建议:

如果您已经设置了Option Explicit On和Option Strict On(在任何级别)

  • 关闭IDE和项目属性中的选项推断
  • 当您需要时,在代码文件中启用选项推断。这可以确保代码易于阅读,启用时,它会提醒读者注意其使用情况,并提醒他们将鼠标悬停在变量上以查看其类型
  • 选项显式关闭时…

    启用“推断”选项可以使满是变体的旧VB6代码更好地编译和运行,因为编译器在编译时为变量分配类型,而不是允许变量进行后期绑定。但是,应进行测试以确保变量在其生命周期中不存储多个类型


    注意:这不能代替对移植到.NET的VB6代码进行适当的重构。变体是不好的,孩子们,是吗?

    我看到的大多数错误都与严格和显式有关,但有些错误发生在推断中。对于VB,我认为这是错误的 选项严格打开:选项显式打开:选项推断关闭
    是最好的起点。这确实会使编写下一步变得有点麻烦,但这确实意味着您的意图毫无疑问。

    VB.Net类型推断不能用于部分信任环境中的aspx页面 ...... 通常,VB.Net默认选项会让我们的生活更加艰难。 在VB9中,有用的选项“推断”默认情况下处于禁用状态。 我们无法在…上写入选项推断。。。 我们不能在页首写。。。 我们无法在web.config中写入。。。 有人刚刚忘记了VB.Net

    。。。。。。


    请参阅此处:

    另请参阅问题:Option infer不会专门创建变体…特别是如果您已打开Option Explicit(您应该打开,除非您无法打开)。据我所知(如有必要,请更正),IDE/compiler根据变量的赋值为变量分配了一个类型,而变量从来都不是变量。这正是我所说的,新的变量类型与旧的变量类型不同。编译器将允许您在本地使用变量,但不会将其传递到方法边界或设置为成员变量,因此变量的固有问题不存在当将Var与Linq一起使用时。这个答案没有用处,而且令人困惑(至少是目前编写的)。应该删除它,因为其他人已经提供了没有此类缺陷的答案。但是,我决定撤销我的-1,因为它并不坏到值得进一步劝阻回答者的程度。(现有的-1足以将其推到列表底部。)您可以将/optioninfer添加到页面的编译器选项中,如@AMissico中所示:实际上,在Eric发布的链接中,您可以看到使用
    编译器选项将无法使用部分信任级别。不过,Microsoft已经发布了一个答案,并建议在web.config.Re中使用
    “当Option Explicit处于关闭状态时……但是,应该进行测试以确保变量在其生命周期中不会存储多种类型。"编译器会抱怨,或者会指定一个有效的类型,对吗?在什么条件下需要进一步测试?你能给出一个例子,其中存储了多个类型,但编译器既不抱怨,也没有找到合适的类型来声明吗?另一个问题:假设
    选项Explicit
    On
    ,但是
    Option Strict
    关闭的
    -如果打开
    Option Infert
    ,后果是什么?(我正在维护一个有数百个遗留文件的项目。最终我希望打开Option Strict,但有很多地方需要更改代码,所以还没有这样做。)