簡體   English   中英

如果布爾值為false,則在字符串中添加逗號

[英]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[]{' ',','});

所以方法是:

  • 在所有元素之間放置標點符號,無論
  • 修剪尾部多余的標點作為最后的操作
  • 我沒有在ReloadCar后面加上任何標點符號,因為作為最后一項,它並不是絕對必要的。 如果將來將其擴展以在末尾添加另一個項目,則必須記住要點一下ReloadCar。 因此,您可能希望立即考慮打孔,而不必下次記住

如果您使用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;
  • 這次我確實對reloadcar進行了標點,因為沒有它,該方法將無法正常工作

不要嘗試在代碼的一行上做太多事情; 您將需要花費幾個月的時間進行修改,而不是僅僅將其發布為可讀性強且易於維護的產品,並且花費更長的時間來確定其工作方式和擴展方式

例如,這與第一個代碼塊相同,但是有點“什么……”。

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.

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