如何在.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);