当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在.Net中有条件地格式化字符串?》经验,为你挑选了2个好方法。

我想做一些条件格式的字符串.我知道您可以按如下方式对整数和浮点数进行一些条件格式化:

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

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

我想知道是否有任何方法可以使用字符串参数的部分.对于一个具体的,但人为的例子,我将寻找替换以下代码中的"if"检查:

string MyFormatString(List items, List 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);
}

Jon Skeet.. 35

好吧,您可以使用条件运算符简化它:

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

这就是你要追求的吗?我不认为你可以有一个格式字符串,有时包括位,有时它不包含.



1> Jon Skeet..:

好吧,您可以使用条件运算符简化它:

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

这就是你要追求的吗?我不认为你可以有一个格式字符串,有时包括位,有时它不包含.


@ loki2302:如果有两个以上的案例,我会仔细研究这些案例是什么.我*可能*使用switch语句.但我绝对认为这比使用if/else更简单.如果你对条件运算符不是很满意,那很好 - 但我很明显并不是唯一一个认为简化代码的人,因为大多数答案都表明了同样的事情.是什么让你觉得它"绝对奇怪"?(顺便说一句,它不叫"三元组",它是条件运算符.)
不知道为什么这个被拒绝,因为它肯定有效......任何选民都在关心启发我?总是很高兴知道为什么人们不喜欢答案 - 这使得将来更容易提供更好的答案.
@ loki2302:所以你的每个语句都不会有多个表达式,并且从不使用条件运算符?听起来像是一个繁琐的代码食谱.有一个分开的地方(我刚刚回答了另外一个问题,在一个表达式中做太多的事情使得很难诊断问题)但是还有一个平衡点.你必须*真的*讨厌LINQ,为什么你被积极鼓励使用组合将一堆操作链接在一起......
@ loki2302:所以链接属性是一个很大的禁忌,但链接方法调用很好吗?对我来说似乎很奇怪.我怀疑我们必须同意不同意 - 你的立场对我来说似乎是极端的.有一个平衡,我肯定从来没有建议在一个语句中做*巨大*数量是一个好主意 - 但在这里我们有三个非常简单的表达式和一个简单的方法调用,所以它似乎绝对好通过条件运算符组合它们.

2> Chris Wenham..:

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

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

这将有助于整理代码.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有