如果布尔值为false,则在字符串中添加逗号

时间:2018-12-11 06:00:52

标签: c# string

我有3个布尔值:

  

船,飞机,汽车

还有3个字符串:

  

ReloadBoat,ReloadPlane,ReloadCar

取决于这些布尔值,如果为false,则需要在字符串之间添加逗号。

string errorMessage = (Boat? "" : " " + ReloadBoat) + (Plane? "" : (errMessage) + ReloadPlane) + (Car? "" : ", " + ReloadCar);

对于上述情况,我遇到的问题是,如果Boat和Plane都为真,则我得到的errorMessage为“,ReloadCar”。

我只希望它是“ ReloadCar”。

关于如何执行此操作的任何想法?

2 个答案:

答案 0 :(得分:7)

突破该限制可使代码更具可读性和可维护性。以您现有的方式使用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进行比较比使用!来反转真相可以使代码更具可读性

答案 1 :(得分:3)

我将创建带有错误的字符串列表,并根据布尔值将其附加到字符串列表中,并使用逗号或任何您想要的字符串将它们连接起来。

        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