2016-08-02 3 views
0

나는이 같은 VB와 C#의 조건은 C#에서하지 않습니다

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

동일한 코드를 다음과 같이하면

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

우선 if 문을 조건으로 IndexOf를 사용하여 C#으로 작성할 수 없습니다.이 경우에는 -1을 사용하여 부울을 허용해야합니다. 하지만 VB에서 당신이 그것을 작성할 수있는 곳에서는 컴파일러가 오류를주지 않으며, IndexOf가 -1을 리턴하더라도 항상 VB에서 true로 평가됩니다. 왜 이런 일이 일어나는 걸까요?

+3

이 질문은 VB6과 어떤 관련이 있습니까? –

+1

"동일한 코드"가 아니기 때문에? 명시 적 비교와 * 마법 번호 *를 삽입했습니다. -1을 선택하게 된 이유는 무엇입니까? –

+5

VB6과 관련이 있습니다. True가 -1 인 기본 버전. 좋은 이유가 많아서, 수학적이고 논리적 인 And and Or 연산자를 구별하지 않아도됩니다. 프로그래머가 코드를 포팅 할 수 있도록하려면 VB.NET으로 이월해야했습니다. Option Strict를 사용하여 프로그램 컴파일러에서 오류가 발생했다는 것을 알리려면 잠시 동안 켜십시오. 그러나 익숙해지기 쉽고 다시 꺼내기가 어려울 수 있습니다. –

답변

9

VB.NET은 정수 값에서 Boolean으로의 암시 적 변환을 제공하기 때문에 C/C++와 비슷한 0이 아닌 정수 표현식은 true으로 간주됩니다. C#에서는 그렇게 할 수 없습니다. 적절한 bool 표현을 제공해야하므로 > 연산자입니다.

VB.NET에서 C#에서 사용하는 것과 같은 표현식을 사용한다면 동일하게 작동합니다.