我有3个布尔值:
船,飞机,汽车
还有3个字符串:
ReloadBoat,ReloadPlane,ReloadCar
取决于这些布尔值,如果为false,则需要在字符串之间添加逗号。
string errorMessage = (Boat? "" : " " + ReloadBoat) + (Plane? "" : (errMessage) + ReloadPlane) + (Car? "" : ", " + ReloadCar);
对于上述情况,我遇到的问题是,如果Boat和Plane都为真,则我得到的errorMessage为“,ReloadCar”。
我只希望它是“ ReloadCar”。
关于如何执行此操作的任何想法?
答案 0 :(得分:7)
突破该限制可使代码更具可读性和可维护性。以您现有的方式使用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进行比较比使用!
来反转真相可以使代码更具可读性
答案 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