【问题标题】:VB.NET weak-typed? strong-typed?VB.NET 弱类型?强类型?
【发布时间】:2010-08-18 23:40:31
【问题描述】:

我以前用过 C#。但是,在我加入一个新公司后,我需要编写 vb.net。但是,我觉得很难写。因为我发现 vb.net 不是强类型的。真的不是强类型吗?或者有什么设置?以下是示例。

If (Me.Check1() And Me.Check2()) Then

根据我的 C# 知识,一旦 Me.Check1() 返回 false,Me.Check2() 将不会被执行。然而我错了。 And 用于按位运算。我应该使用AndAlso 进行布尔运算。所以应该是

If (Me.Check1() AndAlso Me.Check2()) Then

问题是If (Me.Check1() And Me.Check2()) Then仍然有效,没有编译错误。我真的很想知道我是否能够检查这种“不恰当”的操作。

AndAndAlso 只是其中一种情况。

有时,我需要忽略大小写字符串比较。然而,每个人都会犯错。有时,我会这样做

If (String.Compare(Me.string1, Me.string2, True)) Then

我想每个人都知道这个问题。应该是

If (String.Compare(Me.string1, Me.string2, True) = 0) Then

但是,我仍然无法在编译过程中检查这种情况。

我喜欢 C#,因为它可以帮助我们在编译过程中发现许多问题。然而,VB.NET 让我很困惑,许多错误必须在运行时和测试期间确定。

还有一个例子

Public Sub MySub(ByVal obj as Object)
    Console.WriteLine(obj.MyProperty)
End Sub

在 vb.net 中,这种说法仍然有效。为什么?为什么?为什么?有谁知道如何像 C# 一样使用 vb.net?

【问题讨论】:

  • 你的例子都没有真正说明弱类型。也许是动态类型。
  • 我知道这是旧的,但我认为这个评论是相关的。 OP 对布尔和位运算符有误解。在这方面,VB 的工作方式与 C# 完全相同。在 C# 中,&& 运算符用于短路布尔运算,& 运算符用于非短路布尔运算和按位运算。它们 100% 类似于 VB 中的 AndAlsoAnd。 C# 中的 ||| 以及 VB 中的 OrElseOr 也是如此。

标签: vb.net


【解决方案1】:

VB.Net 有强类型模式和弱类型模式。它通过 Strict 选项控制。这可以在项目或源文件级别设置。

' Enable VB.Net strong typing 
Option Strict On

' Enable VB.Net weak / dynamic typing
Option Strict Off

【讨论】:

  • 哇...非常感谢!!!一旦我打开它,超过 1000 个编译错误。哈哈哈~真的谢谢!!!
  • 还有一个问题,你知道如何制作一个强类型的IIf吗?在 C# 中,?: 运算符是强类型的。
  • 如果您使用 Visual Studio 2008,请使用 If 而不是 IIf IIRC
  • 您还可以在项目级别设置 Option Strict On,这样您的所有代码文件都具有强类型。转到项目属性的 Compile 页面并在那里设置 Option Strict。
  • @JaredPar:错了。 VB.NET 的IIf 优于 VB6。在 VB6 中,无论条件是真还是假,IIf 函数的真假部分都会被评估。在 VB.NET 中,首先评估条件,然后根据结果执行 true 语句或 false 语句。这相当于 C# 的condition ? truePart : falsePart。除非您希望我们也避免使用 C# 的三元运算符,否则我认为没有理由不使用 VB.NET 的 IIf
【解决方案2】:

我最近在一个较旧的 vb.net 项目上点击了 Option Strict 按钮,并花了几个小时修复类型错误,但这是值得的。一定要非常小心 DateTime 到字符串,以及字符串到 DateTime 的转换。我在文本框的末尾添加了几个“12:00:00 AM”实例,这会导致旧代码库出现问题。

一旦错误被清除,您就可以打开 Option Infer,这样 Dim 就可以像 c# 的 var 一样工作,而且您不必显式键入所有 Linq 查询。

(我会对此发表评论,但我似乎需要更多积分,抱歉)

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 2010-10-05
    • 2011-08-02
    • 2011-10-20
    • 2011-06-22
    • 2010-09-16
    • 2023-03-11
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多