[英]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[]{' ',','});
所以方法是:
如果您使用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进行比较可以使代码比使用!
更可读!
颠倒真相
我会创建一个带有错误的字符串列表,并根据布尔值将其追加到字符串列表中,并使用逗号或任何所需的字符串将它们连接起来。
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.