我知道 boxing and unboxing are relatively expensive在性能方面。我想知道的是:
将值类型传递给方法的 out
参数是否会导致变量装箱/拆箱(从而影响性能)?编译器可以优化它吗?
int number;
bool result = Int32.TryParse(value, out number);
最佳答案
正如其他人所指出的,这里没有拳击。当您将变量作为对应于 out 或 ref 参数的参数传递时,您所做的就是为该变量创建一个别名。您没有对变量的值 做任何事情。您正在使两个变量代表相同的存储位置。
仅当值类型的值转换为引用类型的值时才会发生装箱,并且您的示例中没有任何类型的转换。引用类型当然必须是 System.Object、System.ValueType、System.Enum 或任何接口(interface)。通常很清楚;代码中存在显式或隐式转换。但是,在某些情况下可能不太清楚。例如,当调用结构基类型的未重写虚方法时,就会发生装箱。 (也有一些奇怪的情况,其中某些类型的泛型类型约束会导致意外的装箱,但它们通常不会在实践中出现。)
关于c# - 在 "out"参数中传递值类型是否会导致变量被装箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4807086/