为什么VB.NET中的If条件总是求值为true,而C#中的相同代码则不然

Pal*_*lav 0 c# vb.net vb6 c#-4.0

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

  Dim str As String = "aaa"
    If (str.IndexOf("bbb")) Then
        Console.WriteLine("aaa")
    End If
    Console.ReadLine()
Run Code Online (Sandbox Code Playgroud)

C#中的代码相同

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

首先,你不能用C语句编写if语句,只需将IndexOf作为条件,你需要设置> -1以使其接受布尔值.但是在VB中你可以编写它,编译器不会给出任何错误,即使IndexOf返回-1如果在VB中总是求值为true.为什么会这样?

Pet*_*iho 9

因为VB.NET提供了从整数值的隐式转换Boolean,所以它会考虑任何非零整数表达式true,类似于C/C++.C#不会让你这样做.它坚持你提供一个正确的bool表达,因此>操作员.

如果您在VB.NET中使用与在C#中使用相同的表达式,它将起到相同的作用.