簡體   English   中英

空推算運算符或條件運算符

[英]null-coalescing operator or conditional operator

您更喜歡哪種編碼風格:

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";

s2或s3?

是否可以縮短時間? s1顯然不起作用。

在這種情況下,我認為我的偏好是:

string s1 = (string)o ?? "Tom";

要么:

string s1 = (o as string) ?? "Tom";

根據是否o真的有望成為一個string或沒有。 無論哪種方式,我都更喜歡這些,因為它們可以更好地表達正在執行的操作,並且如果o已經是string ,則不要通過不必要的轉換來傳遞它們。


一般而言,我更喜歡更清晰和/或更有效的方法。 使用字符串時,我經常需要編寫如下代碼:

string result = !string.IsNullOrEmpty(value) ? value : "Default";

...使用null-coalescing運算符根本無法完成。 另一方面,如果我嘗試合並大量的值,則大約好500倍:

var result = firstTry ?? secondTry ?? thirdTry ?? fourthTry ?? fifthTry;

嘗試改用三元運算符編寫。

如果差異不是那么大,如果只是在一行代碼中包含幾個字符,那就沒關系,只要使用您喜歡的任何東西即可。

這也會起作用,盡管在字符串上調用ToString有點奇怪:

string s4 = (o ?? "Tom").ToString();

對於這種情況,我更喜歡使用三元運算符,因為它可以更清楚地表達意圖並避免對Convert.ToString()的多余調用。 通常,如果轉換是針對相同類型的對象,則我傾向於使用空合並運算符,例如

string s1 = null;
string s2 = s1 ?? string.Empty;

IMO,我傾向於使用:

var s = obj ?? "tom";

sobj類型相同時,不使用Convert或任何其他類型的轉換。

然后,我使用:

var s = obj != null 
    ? obj.ToString() 
    : "tom";

當我需要在分配左側之前進行強制轉換或在右側進行其他類型的轉換時...

我想這只是我的編碼風格。

我也不喜歡 將對象轉換為特定類型會帶來很多麻煩,永遠不要將其隱藏在表達式中。 我非常希望這樣做,如果它炸彈了,那么它會在特定聲明中這樣做。 為了使代碼閱讀者絕對清楚,此轉換已完成。 因此,至少:

string s1 = o as string;
string s2 = s1 ?? "Tom";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM