Ошибка компилятора с использованием условного оператора C # - PullRequest
7 голосов
/ 02 марта 2010

Я не могу найти то, что мне нужно в Google, и держу пари, я получу быстрый ответ здесь.

    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. Пожалуйста помоги! спасибо!

UPDATE: Около 10 из вас дадут правильный ответ LOL, поэтому я просто награжу первого человека, который его представил.

интересный синтаксис, и я думаю, что на самом деле он мне нравится больше, чем синтаксис с ++.

Фактический код, для которого я делал это:

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

Ответы [ 7 ]

15 голосов
/ 02 марта 2010
str = b ? "true" : "false";

Но вы могли бы просто сделать это:

str = b.ToString();

Или вообще исключить посредника:

Console.WriteLine(b);
15 голосов
/ 02 марта 2010

Ваш код должен выглядеть следующим образом:

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

Однако это сродни простому вызову b.ToString().ToLower().Тем не менее, я подозреваю, что ваш фактический вариант использования немного сложнее, чем просто преобразование логического значения в строку.* условный оператор возвращает значение;это не для потока управления, как if / else.

4 голосов
/ 02 марта 2010

Тернарный оператор не допускает переключения операторов, только переключение значений. Вы хотите сделать это:

str= b ? "true" : "false"

(очевидно, b.ToString()) - лучшее решение для этой конкретной проблемы, но я предполагаю, что это только пример).

2 голосов
/ 02 марта 2010

То, что все остальные сказали, и: http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

1 голос
/ 02 марта 2010
str = (b) ? "true" : "false";
0 голосов
/ 02 марта 2010

Просто из любопытства, почему бы просто не сделать это:

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

В .NET типы значений автоматически преобразуют свое значение в строку при вызове .ToString () ... включая логические значения.

0 голосов
/ 02 марта 2010

Тернарный оператор не может быть верхним уровнем оператора в C #, потому что C # требует, чтобы выражения верхнего уровня имели побочный эффект.

...