?:?? 运算符而不是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],你不能:这些操作符被做成返回一个值,而不是执行操作。
expression方式
a ? b : c
如果a
为真,则评估为c
如果a
为假,则评估为c
。
expression方式
b ?? c
如果b
不为空,则评估为b
如果b
为空,则评估为c
。
如果你写
return a ? b : c;
要么
return b ?? c;
他们总会回报一些东西。
对于[2],你可以编写一个函数来返回执行你的“多个操作”的正确的值,但这可能比只使用if/else
更糟糕。
三元运算符( ?:
:)不是为控制stream而devise的,它仅用于条件赋值 。 如果您需要控制程序的stream程,请使用控制结构,如if
/ else
。
参考?:运算符(C#参考)
条件运算符(?:)根据布尔expression式的值返回两个值中的一个。 以下是条件运算符的语法。
参考?? 运算符(C#参考)
?? 运算符称为空合并运算符,用于为可为空的值types以及引用types定义默认值。 如果不是null,则返回左边的操作数; 否则返回右操作数。
这意味着:
[第1部分]
return source ?? String.Empty;
[第二部分]不适用…
三元运算符返回两个值之一。 或者,它可以根据条件执行两个语句中的一个,但这通常不是一个好主意,因为这可能会导致意想不到的副作用。
bar ? () : baz();
在这种情况下,()什么都不做,而baz做一些事情。 但是你只是让代码不太清楚。 我会去更详细的代码,更清晰,更容易维护。
而且,这完全没有意义:
var foo = bar ? () : baz();
因为()没有返回types(它是无效的),并且baz在本示例的调用点处具有未知的返回types。 如果他们不同意,编译器会大声抱怨。
“什么都不做”不是真的有用吗?
如果/ /没有返回你实际上意味着返回null然后写
return Source;
如果你的意思是,忽略代码path,然后写
if ( Source != null ) { return Source; } // source is null so continue on.
最后
if ( Source != value ) { Source = value; RaisePropertyChanged ( "Source" ); } // nothing done.
如果你关心你的代码的冗长性,我会写这个,而不是试图滥用expression式。
if (Source == value) return; Source = value; RaisePropertyChanged("Source");
?:是行程运算符。 (相信我拼写正确),使用起来很简单。 在布尔谓词? iftrue:ifalse; 但是你必须有一个右值/左值,如在Rvalue =谓词? iftrue:iffalse;
ex int i = x < 7 ? x : 7;
int i = x < 7 ? x : 7;
如果x小于7,我会得到x,否则我会是7。
你也可以使用它作为return x < 7 ? x : 7;
return x < 7 ? x : 7;
再次,如上所述,这将具有相同的影响。
所以, Source = Source == value ? Source : string.Empty;
Source = Source == value ? Source : string.Empty;
我相信是你想达到的目标。
?:
运算符根据布尔expression式的值返回两个值中的一个。
Condition-Expression ? Expression1 : Expression2
在这里find更多关于?:
操作符,也被称为三元操作符:
我不认为你可以让它的运营商和它的假设返回一个或另一个。 这不是如果其他语句replace,虽然它可以用于某些情况下。