使用以下代码段:
public static void Main()
{
int v = 2;
Console.WriteLine("number" + "," + v);
}
显然,最好在调用v
时将v.ToString()
替换为WriteLine()
,以防止值类型被加框。
但是,调用ToString()
仍然会在堆上分配一个对象,就像装入值类型一样。
那么使用v.ToString()
而不是让它被装箱有什么好处呢?
答案 0 :(得分:19)
ToString()
只会在其类型没有覆盖ToString()
的情况下对其进行处理(因此必须转到Object
类的实现)。但是,int
确实有一个被覆盖的ToString()
(请参阅http://msdn.microsoft.com/en-us/library/6t7dwaa5(v=vs.110).aspx),所以这不会发生。
装箱实际上是由+
运算符执行的,因为它只调用string.Concat
,它需要类型为Object
(或string
的参数,具体取决于哪个重载是用过的)。因此,必须为整数调用整数。然后,string.Concat
方法再次将int
取消装箱并调用ToString()
。因此,如果您自己调用它,您将无需进行装箱和拆箱,从而节省时间。
虽然在大多数情况下它会非常有限,但仍有性能提升。