c# - 如果 boolean 为 false,则在字符串中添加逗号
问题描述
我有 3 个布尔值:
船、飞机、汽车
和 3 个字符串:
ReloadBoat,ReloadPlane,ReloadCar
根据这些布尔值,如果为 false,我需要在字符串之间添加逗号。
string errorMessage = (Boat? "" : " " + ReloadBoat) + (Plane? "" : (errMessage) + ReloadPlane) + (Car? "" : ", " + ReloadCar);
对于上述情况,我遇到的问题是,如果 Boat 和 Plane 都为真,我将收到 errorMessage 作为“,ReloadCar”。
我希望它只是“ReloadCar”。
关于如何做到这一点的任何想法?
解决方案
打破它使代码更具可读性和可维护性。以你在那里的方式使用你的布尔值会变得非常困难。相反,我建议您将逗号放在错误消息上作为例行公事。将它们连接在一起并删除任何尾随逗号:
string err="";
if(boatNeedsReload)
err+="ReloadBoatErrorMessageWithComma, ";
if(planeNeedsReload)
err+="ReloadPlaneErrorMessageWithComma, ";
if(carNeedsReload)
err+="ReloadCarErrorMessageWithoutComma";
err = err.TrimEnd(new[]{' ',','});
所以方法是:
- 在所有元素之间放置标点符号
- 修剪尾随多余的标点符号作为最后一个操作
- 我没有在 ReloadCar 之后添加任何标点符号,因为作为最后一项,它不是绝对必要的。如果将来扩展它以在末尾添加另一个项目,您必须记住标点 ReloadCar。因此,您可能希望立即考虑对汽车进行标点,而不必记住下次再做
如果您使用字符串生成器,您可以询问长度并在需要时将其敲掉 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 进行比较可以使代码比!
用于反转事实更具可读性
推荐阅读
- visual-studio - Visual Studio 更新 (16.8.1) 导致 CI 构建失败
- java - Springfox-boot-starter swagger 即时处理
- string-literals - 在 ANTLR4 中正确捕获未闭合的字符串
- sql - Oracle - 获取行重复 n 次,在日期上具有动态值
- java - 如何在 SQL 中插入数据?
- java - 如何将多对多连接表的附加列映射到关联映射键?
- python - keras LSTM的结构图
- sdk - 在执行 CRUD 操作时遇到 Java SDK 3 问题
- python - 使用多维数组从字典创建 pd.DataFrame
- python - 从“tf.experimental.numpy.random.randint”中获取整数值