[英]Add comma in string if boolean is false
我有3個布爾值:
船,飛機,汽車
和3個字符串:
ReloadBoat,ReloadPlane,ReloadCar
根據這些布爾值,如果為false,則需要在字符串之間添加逗號。
string errorMessage = (Boat? "" : " " + ReloadBoat) + (Plane? "" : (errMessage) + ReloadPlane) + (Car? "" : ", " + ReloadCar);
對於上面的問題,我遇到的問題是,如果Boat和Plane均為true,則我將errorMessage表示為“,ReloadCar”。
我只希望它是“ ReloadCar”。
關於如何執行此操作的任何想法?
對其進行細分可使代碼更具可讀性和可維護性。 以您現有的方式使用bool會非常困難。 相反,我建議您將常規情況下的逗號放在錯誤消息上。 將它們連接在一起,並刪除所有結尾的逗號:
string err="";
if(boatNeedsReload)
err+="ReloadBoatErrorMessageWithComma, ";
if(planeNeedsReload)
err+="ReloadPlaneErrorMessageWithComma, ";
if(carNeedsReload)
err+="ReloadCarErrorMessageWithoutComma";
err = err.TrimEnd(new[]{' ',','});
所以方法是:
如果您使用stringbuilder,則可以查詢長度並在需要時將其敲掉2:
StringBuilder err=new StringBuilder();
if(boat)
err.Append("ReloadBoat, ");
if(plane)
err.Append("ReloadPlane, ");
if(car)
err.Append("ReloadCar, ");
if(err.Length>0);
err.Length-=2;
不要嘗試在代碼的一行上做太多事情; 您將需要花費幾個月的時間進行修改,而不是僅僅將其發布為可讀性強且易於維護的產品,並且花費更長的時間來確定其工作方式和擴展方式
例如,這與第一個代碼塊相同,但是有點“什么……”。
string err = (
(boatNeedsReload ? "ReloadBoatErrorMessageWithComma, ":"")+
(planeNeedsReload ? "ReloadPlaneErrorMessageWithComma, ":"")+
(carNeedsReload ? "ReloadCarErrorMessageWithoutComma":""))
.TrimEnd(new[]{' ',','});
Falco提出了一個很好的觀點,即您應該努力使布爾變量具有一個聲明為真的名稱,例如“ isTooYoung”或“ boatNeedsReload”。 使您的布爾型具有積極的精神,因為如果您編寫if(boatDoesntNeedReload==false)
,它就會變得令人困惑。 還要注意,經典建議是不要將布爾值與另一個布爾值進行比較以實現布爾值,而是要考慮與false進行比較可以使代碼比使用!
更可讀!
顛倒真相
我會創建一個帶有錯誤的字符串列表,並根據布爾值將其追加到字符串列表中,並使用逗號或任何所需的字符串將它們連接起來。
var boatErrorMessage = "boatErrorMessage";
var planeErrorMessage = "planeErrorMessage ";
var carErrorMessage = "carErrorMessage";
var isBoat = true;
var isPlane = false;
var isCar = true;
var errorMessageList = new List<string>();
if (isBoat)
errorMessageList.Add(boatErrorMessage);
if (isPlane)
errorMessageList.Add(planeErrorMessage);
if (isCar)
errorMessageList.Add(carErrorMessage);
Console.WriteLine(string.Join(", ", errorMessageList));
輸出: boatErrorMessage, carErrorMessage
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.