c# - 在 "out"参数中传递值类型是否会导致变量被装箱?

标签 c# performance boxing unboxing

我知道 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/

相关文章:

c# - 如何从本地共享文件夹 Pc 下载图像?

java - 是创建一个类的一个实例更好,还是为每次出现创建一个单独的实例更好?

MySQL - 将按日期值分组的计数值设置为 0

java - Java 中不必要的拆箱 - 如何重构代码?

c# - 类似引用类型变量的装箱和拆箱技术的性能?

c# - 在文本框中按键时禁用空格

c# - 如何检查两个对象的属性是否相等

c# - 如何在不看到权限屏幕的情况下登录 OneDrive(在初始时间之后)

删除锁时 Java 性能下降

c# - 反射和装箱值类型