繁体   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