String.Format vs ToString并使用InvariantCulture

时间:2010-07-29 09:15:04

标签: c#

我在这里有点困惑。

我应该使用什么

Console.WriteLine((val/1085).ToString("N"));

VS

Console.WriteLine(String.Format("{0:N}", (val/1085)));

另外,我如何适应InvariantCulture?任何最佳做法:)?

4 个答案:

答案 0 :(得分:20)

其实我更喜欢第三种形式:

Console.WriteLine("{0:N}", val / 1085);

Console.WriteLine可以为您执行String.Format

Console.WriteLine不允许您提供文化。如果这是您想要的,您仍然必须使用String.Format。如:

String.Format(CultureInfo.InvariantCulture, "{0:N}", 123456789);

我不建议使用它,因为国际用户在阅读时会遇到问题。对我来说123,456,789.00看起来很奇怪。

答案 1 :(得分:3)

对于格式化+文化,我更喜欢:

 .ToString("####0.00",CultureInfo.InvariantCulture)

.ToString("N",CultureInfo.InvariantCulture)

答案 2 :(得分:1)

在日期时间,可以同时使用两者。我更喜欢使用并查看第一个解决方案(当然缺少括号)。

当你有一些字符串与某些参数有间隙时,String.Format会更有用。然后它是一种杀手级方法,它可以很好地帮助您组织代码。

答案 3 :(得分:0)

使用字符串插值和扩展方法,我发现了一种不变的通用方法来解决该问题,如下所示:

public static class Extensions
{
    public static string ToStringInvariant<T>(this T obj)
    {
        return System.FormattableString.Invariant($"{obj}");
    }
}

用法很简单,只需使用.ToStringInvariant()而不是.ToString()。优点是它适用于任何数据类型。

更多信息: FormattableString.Invariant(FormattableString) Method