String.Format vs ToString()

时间:2012-05-01 15:40:22

标签: c# tostring string.format

任何人都可以解释以下任何一种方法是否有任何好处:

decimal d = 12.0m;

// 1. how I'd have done it
myLabel.Text = d.ToString();

// 2. how I saw someone do it today
myLabel.Text = String.Format("{0}", d);

只是为了澄清,我不是在询问这些方法的作用,我显然对此很满意,只是在这个特定的例子中,一个方面可能有一个性能优势。 我知道string.format()提供的文化和格式的灵活性增加,但我总是只是'tostring()'数字来将它们的值附加到标签或一般的基于文本的属性。

对我来说,string.format()选项看起来更像打字而没有额外的好处,但是我想知道是否有任何其他“引擎盖”的好处,一种方式与另一种方式。

5 个答案:

答案 0 :(得分:28)

我在Linqpad做了一点基准测试:

void Main()
{
    int iterations = 1000000;
    decimal d = 12.0m;
    var text = "";

    var sw = Stopwatch.StartNew();
    for (int i = 0; i < iterations; i++)
    {
        // 1. how I'd have done it
        text = d.ToString();
    }
    sw.Stop();
    sw.ElapsedMilliseconds.Dump("ToString()");

    sw = Stopwatch.StartNew();
    for (int i = 0; i < iterations; i++)
    {
        // 2. how I saw someone do it today
        text = String.Format("{0}", d);
    }
    sw.Stop();
    sw.ElapsedMilliseconds.Dump("Format");
}

的ToString() 157

格式 264

ToString()看起来更快。

编辑:我应该指出,在我的电脑上,1000万“格式”操作只用了2.2秒。这看起来非常像微优化,除非你所做的是极其性能关键或迭代 - 它不会太担心这个。

答案 1 :(得分:3)

字符串格式 - 在引擎盖下使用 - StringBuilder - 使用字符串要快得多。

ToString是对象的默认表示。

答案 2 :(得分:3)

string.Format可用于创建其他复杂字符串,因为它可以设置params个参数集;所以这不是苹果VS苹果的问题。

答案 3 :(得分:2)

ToString()更好,因为Format()无论如何都需要呼叫ToString()。如果您需要指定自定义格式,Format()提供格式说明符,如对齐/填充。否则,没有理由不使用ToString()

ToString()Format()更适合自我记录的代码,而且更有意义。

答案 4 :(得分:1)

我希望调用ToString()会带来边际性能优势,因为它不需要解析您的格式字符串。如果您没有使用Format()的任何功能,那么它会更好地阅读。