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]では、次のことはできません。これらの演算子は、値を返すように作られており、操作を実行するものではありません。
表現
a ? b : c
b
がtrueの場合はa
に評価され、c
がfalseの場合はa
に評価されます。
表現
b ?? c
b
がヌルでない場合はb
と評価され、c
がヌルである場合はb
と評価されます。
書くなら
return a ? b : c;
または
return b ?? c;
always何かを返します。
[2]の場合、「複数の操作」を実行する正しい値を返す関数を作成できますが、それはおそらくif/else
を使用するよりも悪いでしょう。
三項演算子(?:
)は制御フロー用に設計されておらず、条件付き割り当て用にのみ設計されています。プログラムのフローを制御する必要がある場合は、if
/else
などの制御構造を使用します。
?:演算子(C#リファレンス) を参照
条件演算子(?:)は、ブール式の値に応じて2つの値のいずれかを返します。条件演算子の構文は次のとおりです。
??演算子(C#リファレンス) を参照
??演算子は、null合体演算子と呼ばれ、null許容値型と参照型のデフォルト値を定義するために使用されます。 NULLでない場合は、左側のオペランドを返します。それ以外の場合は、正しいオペランドを返します。
つまり:
[パート1]
return source ?? String.Empty;
[パート2]は適用されません...
「何もしない」は実際には機能しませんか?
if // Return Nothingあなたが実際にnullを返すことを意味する場合
return Source;
つまり、コードパスを無視してから
if ( Source != null )
{
return Source;
}
// source is null so continue on.
そして最後に
if ( Source != value )
{ Source = value;
RaisePropertyChanged ( "Source" );
}
// nothing done.
三項演算子は、2つの値のいずれかを返します。または、条件に基づいて2つのステートメントのいずれかを実行できますが、意図しない副作用につながる可能性があるため、一般的にはお勧めできません。
bar ? () : baz();
この場合、()は何もしませんが、bazは何もしません。しかし、あなたはコードをあまり明確にしませんでした。より明確で保守しやすい、より冗長なコードを探します。
さらに、これはほとんど意味がありません:
var foo = bar ? () : baz();
()には戻り型がなく(void)、bazにはこのサンプルの呼び出し時点で不明な戻り型があるためです。彼らが同意しない場合、コンパイラは不満を言い、大声で。
コードの冗長性に懸念がある場合は、式を乱用するのではなく、これを記述します。
if (Source == value) return;
Source = value;
RaisePropertyChanged("Source");
?:は旅程演算子です。 (私はそれを適切につづったと信じています)そしてそれは使いやすいです。ブール述語のように? iftrue:ifalse;ただし、右辺値=述語のように右辺値/左辺値が必要です。 iftrue:iffalse;
ex int i = x < 7 ? x : 7;
xが7未満の場合、xが割り当てられ、そうでない場合は7になります。
return x < 7 ? x : 7;
のように、リターンで使用することもできます
繰り返しますが、上記のように、これは同じ効果があります。
だから、Source = Source == value ? Source : string.Empty;
はあなたが達成しようとしているものだと信じています。
?:
演算子は、ブール式の値に応じて2つの値のいずれかを返します。
Condition-Expression ? Expression1 : Expression2
?:
演算子の詳細については、Ternary演算子としても知られています。
私はあなたがその演算子であり、どちらか一方を返すと仮定することができるとは思わない。特定の場合にそれを使用することはできますが、elseステートメントの置換ではありません。