Если я должен написать этот фрагмент кода, он отлично работает с обычным макетом "if-else".
if(isOn)
{
i = 10;
}
else
{
i = 20;
}
Хотя я не уверен, как преобразовать это, используя тернарный оператор
isOn = true ? i = 1 : i = 0;
Ошибка: Тип условного выражения не может быть определен, потому что нет неявного преобразования между "void" и "void".
EDIT: Answer = i = isOn? 10: 20;
i = isOn? 10: 20;
Можно ли это сделать с помощью методов?
if(isOn)
{
foo();
}
else
{
bar();
}
Попробуйте следующее. BTW, он работает только для присвоений значений, а не для вызовов методов.
i = isOn ? 10 : 20;
Справка:
Вы можете просто попробовать следующее:
i = isOn? 10:20
MSDN говорит:
Условие должно оцениваться как true или false. Если условие истинно, выражение first_expression вычисляется и становится результатом. Если условие ложно, выполняется выражение second_expression и становится результатом. Оценивается только одно из двух выражений.
РЕДАКТИРОВАТЬ:-
Если вы хотите вызывать методы void
в условном операторе, вы можете использовать делегаты еще, то использовать терминные операторы для методов невозможно.
И если ваши методы возвращают что-то, попробуйте вот так:
i = isOn ? foo() : bar(); //assuming both methods return int
Ты на правильном пути, но немного. i = isOn? 10: 20;
Здесь 10
будет присвоено i
если isOn == true
а 20
будет присвоено i
если isOn == false
попробуйте следующее
i = isOn ? 10 :20
Вот объяснение, которое могло бы помочь. Утверждение, которое вы ищете, это:
i = isOn ? 10 : 20;
И вот что это значит:
(result) = (test) ? (value if test is true) : (value if test is false);
Попробуйте следующее:
i = isOn ? 10 : 20
Тебе нужно:
i = true ? 10 : 20;
где true
ваше состояние.
isOn
- это bool
(условие), указанное в коде OP
if
ясно? также это зависит от того, что возвращают эти методы. Если они не возвращают ничегоvoid
то я считаю, что вы не можете использовать троичные операторы.