我有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".
有关如何做到这一点的任何想法?
将其分解使代码更具可读性和可维护性.以你在那里的方式使用你的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)
所以方法是:
如果你使用一个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)
不要试图在代码中的一行上做太多事情; 你将达到一个需要在几个月内修改的地步,它需要更长的时间来弄清楚它是如何工作的以及如何扩展它,而不仅仅是把它分解成可读的东西并因此可维护
作为一个例子,这与第一个代码块相同,但它有点"什么......?"
string err = (
(boatNeedsReload ? "ReloadBoatErrorMessageWithComma, ":"")+
(planeNeedsReload ? "ReloadPlaneErrorMessageWithComma, ":"")+
(carNeedsReload ? "ReloadCarErrorMessageWithoutComma":""))
.TrimEnd(new[]{' ',','});
Run Code Online (Sandbox Code Playgroud)
Falco提出了一个很好的观点,你应该努力让你的布尔变量有一个声明真理的名字,比如"isTooYoung"或"boatNeedsReload".让你的布尔有一个积极的精神,因为如果你写,它开始变得混乱if(boatDoesntNeedReload==false).另请注意,经典建议是不要将布尔值与另一个布尔值进行比较以实现布尔值,但请注意,与false进行比较可以使代码比使用!反转真值更具可读性