代码之家  ›  专栏  ›  技术社区  ›  Adam Tegen

如何在.Net中有条件地格式化字符串?

  •  31
  • Adam Tegen  · 技术社区  · 16 年前

    我想对字符串进行一些条件格式化。我知道您可以对整数和浮点数进行一些条件格式化,如下所示:

    Int32 i = 0;
    i.ToString("$#,##0.00;($#,##0.00);Zero");
    

    如果变量为正、负或零,则上述代码将生成三种格式之一。

    我想知道是否有任何方法可以对字符串参数使用节。对于混凝土,但是 做作的 例如,我希望替换以下代码中的“if”签入:

    string MyFormatString(List<String> items, List<String> values)
    {
        string itemList = String.Join(", " items.ToArray());
        string valueList = String.Join(", " values.ToArray());
    
        string formatString;
    
        if (items.Count > 0)
        //this could easily be: 
        //if (!String.IsNullOrEmpty(itemList))
        {
            formatString = "Items: {0}; Values: {1}";
        }
        else
        {
            formatString = "Values: {1}";
        }
    
        return String.Format(formatString, itemList, valueList);
    }
    
    7 回复  |  直到 9 年前
        1
  •  35
  •   Jon Skeet    16 年前

    好吧,你可以用条件运算符简化一下:

    string formatString = items.Count > 0 ? "Items: {0}; Values: {1}" : "Values: {1}";
    return string.Format(formatString, itemList, valueList);
    

    甚至包括在同一声明中:

    return string.Format(items.Count > 0 ? "Items: {0}; Values: {1}" : "Values: {1}",
                         itemList, valueList);
    

        2
  •  7
  •   Chris Wenham    16 年前

    不在String.Format()内,但可以使用C的内联运算符,例如:

    return items.Count > 0 
           ? String.Format("Items: {0}; Values: {1}", itemList, valueList)
           : String.Format("Values: {0}", valueList);           
    

    这将有助于整理代码。

        3
  •  4
  •   JYelton Melchior Blausand    13 年前

    虽然没有直接提到OP,但这也属于问题的标题。

    /// <summary>
    /// Like String.Format, but if any parameter is null, the nullOutput string is returned.
    /// </summary>
    public static string StringFormatNull(string format, string nullOutput, params object[] args)
    {
        return args.Any(o => o == null) ? nullOutput : String.Format(format, args);
    }
    

    例如,如果我将温度格式化为“20°C”,但遇到空值,它将打印替代字符串而不是“C”。

    double? temp1 = 20.0;
    double? temp2 = null;
    
    string out1 = StringFormatNull("{0}°C", "N/A", temp1); // "20°C"
    string out2 = StringFormatNull("{0}°C", "N/A", temp2); // "N/A"
    
        4
  •  2
  •   Mark Cidade    16 年前
    string.Format(  (items.Count > 0 ? "Items: {0}; " : "") + "Values {1}"
                  , itemList
                  , valueList); 
    
        5
  •  1
  •   Andrey Agibalov    13 年前

    别这样。我不知道你代码中的项和值都是什么,但我相信,这对可以被看作某种实体。将此实体定义为类并重写其 ToString() 方法返回您想要的任何内容。拥有 if

        6
  •  1
  •   Paul Navin Israni    7 年前

    这可能不是你要找的,但是。。。

    formatString = (items.Count > 0) ? "Items: {0}; Values: {1}" : "Values: {1}";
    
        7
  •  0
  •   Joel Coehoorn    16 年前

    return String.Format(items.ToString(itemList + " ;;") + "Values: {0}", valueList);
    

    不幸的是,似乎ToStrug()方法不喜欢空白否定和零选项,也不喜欢任何地方都有一个或0个。我把它留在这里,以防它给别人一个更好的答案。