我收到此運算式的代碼氣味:
return url == null ? View("Demo") : View(!string.IsNullOrEmpty(url) ? (object)url: null);
如何擴展此三元運算子以避免非投訴編碼標準(Sonar cube 將其檢測為主要代碼異味/不合規)?
uj5u.com熱心網友回復:
對于每條規則,SonarQube 都提供了合規和不合規解決方案的描述和示例。對于這個特定規則,它說:
僅僅因為您可以做某事,并不意味著您應該這樣做,嵌套三元運算就是這種情況。嵌套三元運算子會產生一種在您撰寫代碼時看起來很清晰的代碼,但六個月后會讓維護者(或更糟 - 未來的您)摸不著頭腦和詛咒。
相反,為了清楚起見,請使用另一行將嵌套操作表示為單獨的陳述句。
不合規的代碼示例
public string GetReadableStatus(Job j) { return j.IsRunning ? "Running" : j.HasErrors ? "Failed" : "Succeeded"; // Noncompliant }合規解決方案
public string GetReadableStatus(Job j) { if (j.IsRunning) { return "Running"; } return j.HasErrors ? "Failed" : "Succeeded"; }
在您的特定示例中,將制作為:
if (url == null) {
return View("Demo");
}
return View(!string.IsNullOrEmpty(url) ? (object)url: null);
然而,我會考慮在switch宣告中重新表述所有這些內容;這可能更容易閱讀和維護,例如:
switch(url) {
case null:
return View("Demo");
case "":
return View(null);
default:
return View(url);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325411.html
