我想做一些条件格式的字符串。我知道您可以按如下方式对整数和浮点数进行一些条件格式化:
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);
}
好吧,您可以使用条件运算符简化它:
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);
这就是你要追求的吗?我不认为你可以有一个格式字符串,有时包括位,有时它不包含。
不在String.Format()中,但您可以使用C#的内联运算符,例如:
return items.Count > 0
? String.Format("Items: {0}; Values: {1}", itemList, valueList)
: String.Format("Values: {0}", valueList);
这将有助于整理代码。
虽然没有直接解决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"
string.Format( (items.Count > 0 ? "Items: {0}; " : "") + "Values {1}"
, itemList
, valueList);
只是不要。我不知道你的代码中的项目和值是什么,但我相信,这对可以被视为某种实体。将此实体定义为类并覆盖其ToString()
方法以返回您想要的任何内容。让if
决定如何根据某些上下文格式化这个字符串绝对没有错。
这可能不是你想要的,但是怎么样......
formatString = (items.Count > 0) ? "Items: {0}; Values: {1}" : "Values: {1}";
我希望这可以做到:
return String.Format(items.ToString(itemList + " ;;") + "Values: {0}", valueList);
不幸的是,似乎.ToString()方法不喜欢空白的否定和零选项,或者在任何地方都没有#或0。我会把它留在这里,以防它指向别人更好的答案。