2016-08-02 34 views
0

Ich habe dieselbe in VB und C# Wenn die Bedingung wie folgtWarum diese Bedingung Wenn in VB.NET ergibt immer wahr und den gleichen Code in C# nicht

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

den gleichen Code in C#

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

Zunächst können Sie nicht schreiben, wenn Anweisung in C# mit nur IndexOf als Bedingung Sie> -1 setzen müssen, damit es einen boolean akzeptiert. Aber wo in VB Sie das schreiben können, gibt der Compiler keinen Fehler, und selbst wenn IndexOf -1 zurückgibt, wird in VB immer True ausgewertet. Warum passiert dies?

+3

Was hat diese Frage mit VB6 zu tun? –

+1

Weil es nicht der "gleiche Code" ist? Du hast einen expliziten Vergleich und eine * magische Zahl * eingefügt - was hat dich dazu gebracht, -1 zu wählen? –

+5

Es hat alles mit VB6 zu tun. Eine Basisversion, in der True -1 entspricht. Es gibt viele gute Gründe dafür, dass man nicht zwischen den mathematischen und logischen And- und Or-Operatoren unterscheiden muss. Es musste in VB.NET übertragen werden, um Programmierern eine Möglichkeit zu geben, ihren Code zu portieren. Programmieren Sie mit Option Strict On für eine Weile, damit der Compiler Ihnen sagen kann, dass Sie falsch liegen. Aber Vorsicht, es ist leicht sich daran zu gewöhnen und es wird schwer sein, es wieder auszuschalten. –

Antwort

9

Da VB.NET eine implizite Konvertierung von dem Integer-Wert zu bereitstellt, wird ein beliebiger Ganzzahl-Ausdruck ungleich 0 als true betrachtet, ähnlich wie in C/C++. C# lässt dich das nicht machen. Es besteht darauf, dass Sie eine ordnungsgemäße bool Ausdruck, daher die > Betreiber.

Wenn Sie den gleichen Ausdruck in VB.NET verwenden würden, wie Sie in C# verwenden, würde es das gleiche funktionieren.