首页 > 解决方案 > 如果 boolean 为 false,则在字符串中添加逗号

问题描述

我有 3 个布尔值:

船、飞机、汽车

和 3 个字符串:

ReloadBoat,ReloadPlane,ReloadCar

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

string errorMessage = (Boat? "" : " " + ReloadBoat) + (Plane? "" : (errMessage) + ReloadPlane) + (Car? "" : ", " + ReloadCar);

对于上述情况,我遇到的问题是,如果 Boat 和 Plane 都为真,我将收到 errorMessage 作为“,ReloadCar”。

我希望它只是“ReloadCar”。

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

标签: c#string

解决方案


打破它使代码更具可读性和可维护性。以你在那里的方式使用你的布尔值会变得非常困难。相反,我建议您将逗号放在错误消息上作为例行公事。将它们连接在一起并删除任何尾随逗号:

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 进行比较可以使代码比!用于反转事实更具可读性


推荐阅读