gpt4 book ai didi

c# - 调用 ToString() 以防止装箱

转载 作者:可可西里 更新时间:2023-11-01 08:59:14 25 4
gpt4 key购买 nike

使用以下代码片段:

public static void Main()
{
int v = 2;
Console.WriteLine("number" + "," + v);
}

显然,在对 WriteLine() 的调用中,最好将 v 替换为 v.ToString() 以防止值类型被盒装。然而,调用 ToString() 仍然会在堆上分配一个对象,就像装箱值类型一样。

那么使用v.ToString()而不是让它装箱有什么好处呢?

更新:看起来像 int.ToString() 在将值传递给 string.Concat() 之前被调用,有或没有显式调用 int.ToString()你自己。我检查了 CIL 使用和不使用 ToString(),它们是相同的。

enter image description here

最佳答案

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()。因此,如果您自己调用它,就不必进行装箱和拆箱操作,从而节省时间。

虽然在大多数情况下,性能提升非常有限。

关于c# - 调用 ToString() 以防止装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24277239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com