这些将int转换为字符串的方法有什么区别?

时间:2014-10-04 20:41:49

标签: c#

string s = i.ToString();

string s = Convert.ToString(i);

string s = string.Format("{0}", i);

string s = string.Empty + i;

string s = new StringBuilder().Append(i).ToString();

1 个答案:

答案 0 :(得分:3)

他们只是通过几种方式做同样的事情,这个想法是,它们可以让您在任何需要它们的环境中轻松自如。在您当前的使用中,它们在功能上都是等效的。当然,在其他用途​​中,它们可用于实现截然不同的结果。

string s = i.ToString();

这是必要的,因为它必须覆盖object.ToString(),所以这成为所有其余的基础。

string s = Convert.ToString(i);

这个只是调用int.ToString(),他们可能只是提供它Convert.ToString(object)不必处理int值的装箱和拆箱。

string s = string.Format("{0}", i);

这个有点不同,但仍然依赖于int.ToString()。在目前的形式中,它不会特别有用,而且特别低效,但基本上string.Format是格式化字符串的一种快捷方式(显然),并使用object.ToString() (或IFormattable.ToString()可用且有用,就像格式化程序存在时int一样。)

string s = string.Empty + i;

同样,在当前位置并不是特别有用,但这支持更高级的操作。 string s = "This is the number: " + i;比明确调用ToString容易得多,所以这只是一种语言特征 - 语法糖,就像它一样。

string s = new StringBuilder().Append(i).ToString();

这个就像string.Format。就目前而言,这是一件低效率的事情。但是,如果您实际上使用StringBuilder构建了一些内容,那么最好不要对int进行装箱和取消装箱。


有点像这样,这两者之间的区别是什么?

string[] nums = new [] { "1", "2", "3", "4" };

for (int v = 0; v < nums.Length; v++)
    Console.WriteLine(nums[v]);

string[] nums = ...;

foreach (var v in nums)
    Console.WriteLine(v);

他们只是两种基本相同的方式。