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

时间:2020-03-06 14:56:27  来源:igfitidea点击:

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

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);
}

解决方案

这可能不是我们想要的,但是...

formatString = (items.Count > 0) ? "Items: {0}; Values: {1}" : "Values: {1}";

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

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

这将有助于整理代码。

好吧,我们可以使用条件运算符将其简化一些:

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);

那是你所追求的吗?我认为我们不能使用单一格式的字符串,该字符串有时包含位,有时却不包含。

我希望这可以做到:

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

不幸的是,.ToString()方法似乎不喜欢空白的负数和零选项,或者在任何地方都不具有a或者0。我将其保留在此处,以防其他人找到更好的答案。

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