?:?? 运算符而不是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,虽然它可以用于某些情况下。