【问题标题】:Handling string builders in right way以正确的方式处理字符串生成器
【发布时间】:2014-02-21 11:32:20
【问题描述】:

我根据以下条件将一些字符串附加到我的字符串生成器对象中:

StringBuilder Sb_Appearance = new StringBuilder();

if (Details.IsNeat == true) 
    Sb_Appearance.Append("Neat");

if (Details.IsDressed == true) 
    Sb_Appearance.Append(",Dressed");

if (Details.IsDisheveled == true) 
    Sb_Appearance.Append(",Disheveled");

if (Details.IsInappropriatelyDressed == true) 
    Sb_Appearance.Append(",Inappropriately Dressed");

if (Details.IsAppearanceOther == true) 
    Sb_Appearance.Append(",Other");

如果第一个和第四个条件出错,我的最终字符串可以变成::

,Dressed,Disheveled,Other

在这里我可以得到一个额外的逗号。如果逗号存在于第一个索引的 Sb_Appearance 中,我必须找到它,并且必须删除它。我该怎么做。

【问题讨论】:

  • 有这么多项目吗?因为您还可以将它们添加到 List<string> 并在其上使用 String.Join

标签: c# asp.net .net c#-4.0 c#-3.0


【解决方案1】:

我建议使用List<string> 并在之后加入:

var list = new List<string>();

if (Details.IsNeat)
    list.Add("Neat");

if (Details.IsDressed)
    list.Add("Dressed");

if (Details.IsDisheveled)
    list.Add("Disheveled");

if (Details.IsInappropriatelyDressed)
    list.Add("Inappropriately Dressed");

if (Details.IsAppearanceOther)
    list.Add("Other");

var result = string.Join(", ", list);

我知道这不是你问的(你想要StringBuilder)..但这就是你想要的。

【讨论】:

    【解决方案2】:

    这是一种方法:

    StringBuilder Sb_Appearance = new StringBuilder();
    if (Details.IsNeat) Sb_Appearance.Append(",Neat");
    if (Details.IsDressed) Sb_Appearance.Append(",Dressed");
    if (Details.IsDisheveled) Sb_Appearance.Append(",Disheveled");
    if (Details.IsInappropriatelyDressed) Sb_Appearance.Append(",Inappropriately Dressed");
    if (Details.IsAppearanceOther) Sb_Appearance.Append(",Other");
    
    var NewString = Sb_Appearance.ToString().TrimStart(',');
    

    【讨论】:

    • 比较布尔值和true?这也可能是问题的味道,但通常你添加Neat, 并删除最后一个符号。顺便说一句,转换为字符串并修剪它会产生两个字符串
    • @Sergey,这是 OPs 问题的代表。我会改得更正确。
    • 我想这更像是元数据,但是您认为表示提出的问题并提供答案更重要,还是将问题中呈现的代码修改为更正确的形式更重要?
    • 我一直关注Boy Scout Rule。你不必让代码更干净,但如果你能让它更干净就好了
    【解决方案3】:

    为什么要先添加逗号然后添加值?如果可以的话,我会交换逗号。

    StringBuilder Sb_Appearance = new StringBuilder();
    
    if (Details.IsNeat == true) 
        Sb_Appearance.Append("Neat,");
    
    if (Details.IsDressed == true) 
        Sb_Appearance.Append("Dressed,");
    
    if (Details.IsDisheveled == true) 
        Sb_Appearance.Append("Disheveled,");
    
    if (Details.IsInappropriatelyDressed == true) 
        Sb_Appearance.Append("Inappropriately Dressed,");
    
    if (Details.IsAppearanceOther == true) 
        Sb_Appearance.Append("Other");
    
    if(Sb_Appearance[Sb_Appearance.Length - 1] == ',')
        Sb_Appearance.Remove(Sb_Appearance.Length - 1, 1);
    

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多