2010-03-02 6 views
7

Google에서 필요한 것을 찾지 못하고 빠른 대답을 얻을 수 있습니다.C# 조건부 연산자를 사용하여 컴파일러 오류가 발생했습니다.

String str; 
    bool b = true; 
    b ? str="true" : str="false"; 

    Console.Out.WriteLine(str); 

? : 문법이 나에게 맞는 것 같습니다. 그래도 컴파일러 오류가 발생합니다.

Program.cs (13,28)
오류 CS1002 :; 예상
Program.cs (13,28) :
오류 CS1525 : 잘못된 표현 용어 ':'
Program.cs (13,30) :
오류 CS1002 :; 예상 됨

csharp 구문에 대해 확실하지 않지만 cpp에서 빌드됩니다. 도와주세요! 감사!

업데이트 : 약 10 명 중 정답을 LOL로 입력 했으므로 제출 한 사람에게만 상을 수여합니다.

흥미로운 구문, 나는 실제로 C++ 구문보다 더 좋다고 생각합니다.

I가 이렇게 된 실제 코드는 다음과 같습니다

ftp.ConnectMode = job.FTPUsePassiveMode ? FTPConnectMode.PASV : FTPConnectMode.ACTIVE; 
+0

다른 사람들은 이미 적절한 해결책을 제시했습니다. 우선 순위가 문제가 될 가능성이 있습니다. 'b? (str = "true") : (str = "false");'작동한다고해도 그렇게 사용하지 않을 것입니다. – Matthew

+0

@cchampion : "흥미로운 구문입니다. 실제로는 C++ 구문보다 더 좋게 생각합니다." - C++ 구문은 동일합니다. str = b이어야합니다? "true": 두 언어 모두에서 "false". – Josh

답변

15

에 코드를 읽어야하지만

str = b ? "true" : "false"; 

, 이것은 단지 b.ToString().ToLower()를 호출하는 가깝다. 즉, 실제 사용 사례는 부울 값을 문자열로 변환하는 것보다 조금 더 복잡하다고 생각합니다.

업데이트 코멘트에 나타난 바와 같이
conditional operator는 값을 반환 if/else과 같은 제어 흐름이 아닙니다.

+8

관련 점은 삼항 연산자 (? :)가 제어 흐름 메커니즘 (if/else와 같은)이 아닌 값을 반환하는 표현식이라는 것입니다. –

+0

@ 타일러 : 음. – Josh

15
str = b ? "true" : "false"; 

하지만 그냥이 작업을 수행 할 수 있습니다 :

str = b.ToString(); 

심지어는 아예 중개인을 잘라 :

Console.WriteLine(b); 
+0

엄밀히 말하면 "true"및 "false"가 아닌 ToString() (및 WriteLine)에서 "True"및 "False"를 얻을 수 있지만 중요하지는 않습니다. 항상 ToString()을 할 수 있습니다. ToLower(). – tvanfosson

1
str = (b) ? "true" : "false"; 
+0

하지만 ... 왜 괄호 안에'b'를 넣어야합니까? 나는 그것이 해결하는 애매 모호함을 보지 못한다. –

4

는 삼항 연산자 문 전환을 허용하지 않습니다, 값 전환 만.

str= b ? "true" : "false" 

(분명히 b.ToString())이이 특정 문제에 대한 더 나은 솔루션입니다,하지만 난)이 그냥 예입니다 있으리라 믿고있어 : 당신은이 작업을 수행 할 수 있습니다.

+0

표현식 선택 ... 및 str = "true"표현식입니다. a = b를 시도해보십시오. (str = "true") : (str = "false"); 나는 그것이 잘 작동한다는 것을 알게 될 것입니다. –

+0

그리고이 것이 유효한 C++ 코드라는 점을 지적하기 위해 C++에서 명령문을 사용하여 값을 얻을 수 있기 때문입니다. 다음은 C++에서 유효합니다 (매우 혼란 스럽긴하지만) :'a = b? – Josh

+0

@Ben : 표현식 선택이 더 나은 용어이고 할당은 표현식 (lvalue에 배치 된 값을 반환)이지만 삼항 연산자의 출력은 무시할 수 없습니다. –

0

는 삼항 연산자는 C#에서 문의 최상위 수 없습니다.그냥 호기심

-1

, 왜 그냥하지 : .NET에서

bool b = true; 
string str = b.ToString(); 

값 형식이 자동으로 문자열로 자신의 값을 변환 논리 값을 포함하여 ... (이)라고로 .toString 때.

+0

좋은 제안인데 왜이 경우 삼항 연산자가 작동하지 않는지에 대한 질문에 대답하지 않습니다. – Josh

+0

요점은 문제를 완전히 제거하는 것이 었습니다. 다른 답변은 적절하지 못한 이유 (그가 잘못 사용했기 때문에)를 적절하게 설명했습니다. 특히 반복적 인 대답이 반복되는 것을 좋아하지 않습니다. 나는 그것이 명백하게 그의 질문에 대답하지 않더라도 그것이 문제에 대한 유효한 해결책 이었기 때문에 이것이 투표를 할 자격이 없다고 생각한다. – jrista

관련 문제