为什么VB.NET中的If条件总是计算为true,而C#中的相同代码却不计算为true

本文关键字:计算 true 代码 条件 If NET 为什么 VB 中的 | 更新日期: 2023-09-27 17:59:44

我在VB和C#中有相同的If条件,如下所示

  Dim str As String = "aaa"
    If (str.IndexOf("bbb")) Then
        Console.WriteLine("aaa")
    End If
    Console.ReadLine()

C#中的相同代码

 string str = "aaa";
  if(str.IndexOf("bbb") > -1)
   {
     Console.WriteLine("aaa");
   }
  Console.ReadLine();

首先,您不能在C#中只使用IndexOf作为条件来编写if语句,您需要放置>-1以使其接受布尔值。但是,在VB中,编译器不会给出任何错误,即使IndexOf返回-1,如果在VB中总是计算为true。为什么会发生这种情况?

为什么VB.NET中的If条件总是计算为true,而C#中的相同代码却不计算为true

因为VB.NET提供了从整数值到Boolean的隐式转换,所以它认为任何非零整数表达式都是true,类似于C/C++。C#不会让你这么做的。它坚持要求您提供一个正确的bool表达式,因此提供了>运算符。

如果您在VB.NET中使用与在C#中使用的表达式相同的表达式,它的工作原理也会相同。