null-coalescing运算符或条件运算符

rkr*_*ter 0 c#

您更喜欢哪种编码风格:

object o = new object();
//string s1 =  o ?? "Tom"; // Cannot implicitly convert type 'object' to 'string' CS0266
string s3 = Convert.ToString(o ?? "Tom");
string s2 = (o != null) ? o.ToString() : "Tom";
Run Code Online (Sandbox Code Playgroud)

s2还是s3?

是否可以缩短它?s1显然不起作用.

Aar*_*ght 5

在这种情况下,我认为我的偏好是:

string s1 = (string)o ?? "Tom";
Run Code Online (Sandbox Code Playgroud)

要么:

string s1 = (o as string) ?? "Tom";
Run Code Online (Sandbox Code Playgroud)

根据是否o真的有望成为string与否.无论哪种方式,我更喜欢这些,因为它们更好地表达了正在做的事情,并且如果o已经是,那么不要通过不必要的转换传递这些string.


作为一般规则,我更喜欢哪个更清晰和/或实际工作.使用字符串时,我经常需要写这样的东西:

string result = !string.IsNullOrEmpty(value) ? value : "Default";
Run Code Online (Sandbox Code Playgroud)

...使用null-coalescing运算符根本无法完成.另一方面,如果我想要合并大量的值,它会好大约500倍:

var result = firstTry ?? secondTry ?? thirdTry ?? fourthTry ?? fifthTry;
Run Code Online (Sandbox Code Playgroud)

尝试用三元运算符来编写它.

如果差异不是那么引人注目,如果它只是在一行代码中的几个字符,那真的没关系,只要使用你喜欢的任何东西.