如果boolean为false,则在字符串中添加逗号

ref*_*esh 0 c# string

我有3个布尔值:

船,飞机,汽车

还有3个字符串:

ReloadBoat,ReloadPlane,ReloadCar

根据这些布尔值,如果为false,我需要在字符串之间添加逗号.

string errorMessage = (Boat? "" : " " + ReloadBoat) + (Plane? "" : (errMessage) + ReloadPlane) + (Car? "" : ", " + ReloadCar);
Run Code Online (Sandbox Code Playgroud)

对于上面的问题,我得到的问题是,如果Boat和Plane都是真的,我将errorMessage作为",ReloadCar".

我希望它只是"ReloadCar".

有关如何做到这一点的任何想法?

Cai*_*ard 7

将其分解使代码更具可读性和可维护性.以你在那里的方式使用你的bool会变得非常辛苦.相反,我建议您在常规问题上将逗号放在错误消息上.将它们连接在一起并删除任何尾随逗号:

string err="";

if(boatNeedsReload)
  err+="ReloadBoatErrorMessageWithComma, ";
if(planeNeedsReload)
  err+="ReloadPlaneErrorMessageWithComma, ";
if(carNeedsReload)
  err+="ReloadCarErrorMessageWithoutComma";

err = err.TrimEnd(new[]{' ',','});
Run Code Online (Sandbox Code Playgroud)

所以方法是:

  • 无论如何,在所有元素之间加上标点符号
  • 修剪尾随冗余标点符号作为最后一个操作
  • 我没有在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;
Run Code Online (Sandbox Code Playgroud)
  • 这次我做了点击reloadcar,因为如果没有它,这种方法将无法正常工作

不要试图在代码中的一行上做太多事情; 你将达到一个需要在几个月内修改的地步,它需要更长的时间来弄清楚它是如何工作的以及如何扩展它,而不仅仅是把它分解成可读的东西并因此可维护

作为一个例子,这与第一个代码块相同,但它有点"什么......?"

string err = (
  (boatNeedsReload ? "ReloadBoatErrorMessageWithComma, ":"")+
  (planeNeedsReload ? "ReloadPlaneErrorMessageWithComma, ":"")+
  (carNeedsReload ? "ReloadCarErrorMessageWithoutComma":""))
  .TrimEnd(new[]{' ',','});
Run Code Online (Sandbox Code Playgroud)

Falco提出了一个很好的观点,你应该努力让你的布尔变量有一个声明真理的名字,比如"isTooYoung"或"boatNeedsReload".让你的布尔有一个积极的精神,因为如果你写,它开始变得混乱if(boatDoesntNeedReload==false).另请注意,经典建议是不要将布尔值与另一个布尔值进行比较以实现布尔值,但请注意,与false进行比较可以使代码比使用!反转真值更具可读性