?:?? Операторы вместо IF | ELSE
public string Source
{
get
{
/*
if ( Source == null ){
return string . Empty;
} else {
return Source;
}
*/
return Source ?? string.Empty;
}
set
{
/*
if ( Source == null ) {
Source = string . Empty;
} else {
if ( Source == value ) {
Source = Source;
} else {
Source = value;
}
}
*/
Source == value ? Source : value ?? string.Empty;
RaisePropertyChanged ( "Source" );
}
}
Могу ли я использовать операторы ?:
??
ТОЧНО как If/Else?
Мой вопрос:
Как написать следующее с?:?? операторы
[1]
if ( Source == null ){
// Return Nothing
} else {
return Source;
}
[2]
if ( Source == value ){
// Do Nothing
} else {
Source = value;
RaisePropertyChanged ( "Source" );
}
Коротко. Как ничего не делать, ничего не возвращать и выполнять несколько инструкций с помощью оператора ?:
??
?
Ответы
Ответ 1
Для [1] вы не можете: эти операторы созданы для возврата значения, а не для выполнения операций.
Выражение
a ? b : c
оценивает b
, если a
является истинным и оценивает c
, если a
является ложным.
Выражение
b ?? c
оценивает b
, если b
не является нулевым и оценивается как c
, если b
имеет значение null.
Если вы пишете
return a ? b : c;
или
return b ?? c;
они всегда будут что-то возвращать.
Для [2] вы можете написать функцию, которая возвращает правильное значение, которое выполняет ваши "множественные операции", но это, вероятно, хуже, чем просто использование if/else
.
Ответ 2
Тернарный оператор (?:
) не предназначен для управления потоком, он предназначен только для условного назначения. Если вам нужно контролировать поток вашей программы, используйте структуру управления, например if
/else
.
Ответ 3
Ссылка на ?: Оператор (ссылка на С#)
Условный оператор (?:) возвращает одно из двух значений в зависимости от значение булева выражения. Ниже приведен синтаксис для условный оператор.
Ссылка на ?? Оператор (ссылка на С#)
оператор называется нуль-коалесцирующий оператор и используется для определения значения по умолчанию для типы нулевых значений, а также ссылочные типы. Он возвращает левый операнд, если он не равен нулю; иначе он вернет право операнд.
Это означает:
[Часть 1]
return source ?? String.Empty;
[Часть 2] не применимо...
Ответ 4
"ничего не делать" на самом деле не работает?
if by//Return Nothing, вы на самом деле означаете return null, а затем напишите
return Source;
если вы имеете в виду, проигнорируйте кодировку, тогда напишите
if ( Source != null )
{
return Source;
}
// source is null so continue on.
И для последнего
if ( Source != value )
{ Source = value;
RaisePropertyChanged ( "Source" );
}
// nothing done.
Ответ 5
Тернарный оператор ВОЗВРАЩАЕТ одно из двух значений. Или он может выполнить одно из двух утверждений, основанное на его состоянии, но это вообще не очень хорошая идея, поскольку это может привести к непреднамеренным побочным эффектам.
bar ? () : baz();
В этом случае() ничего не делает, а baz что-то делает. Но вы сделали код менее понятным. Я бы использовал более подробный код, который был бы более понятным и понятным.
Кроме того, это мало смысла:
var foo = bar ? () : baz();
поскольку() не имеет типа возврата (он недействителен), а baz имеет тип возврата, который неизвестен в точке вызова в этом примере. Если они не согласны, компилятор будет жаловаться и громко.
Ответ 6
Если вы обеспокоены многословием вашего кода, я бы написал это вместо того, чтобы пытаться злоупотреблять выражениями.
if (Source == value) return;
Source = value;
RaisePropertyChanged("Source");
Ответ 7
the?: является маршрутным оператором. (верю, что я правильно написал), и он прост в использовании.
как в булевом предикате? iftrue: ifalse; Но у вас должно быть значение rvalue/lvalue, как в rvalue = предикат? iftrue: iffalse;
ex int i = x < 7 ? x : 7;
если x было меньше 7, я получил бы присвоенный x, если бы я не был 7.
вы также можете использовать его в обратном порядке, как в return x < 7 ? x : 7;
снова, как и выше, это будет иметь тот же эффект.
Итак, Source = Source == value ? Source : string.Empty;
Я считаю, что вы пытаетесь достичь.
Ответ 8
Оператор ?:
возвращает одно из двух значений в зависимости от значения булевого выражения.
Condition-Expression ? Expression1 : Expression2
Найти здесь больше на операторе ?:
, также известном как Тернарный оператор:
Ответ 9
Я не думаю, что вы можете его оператору и, предположительно, возвратить тот или другой. Это не так, если замена замещения else, хотя она может быть использована для этого в определенном случае.