通过引用传递C#值类型以避免装箱

本文关键字:类型 引用 | 更新日期: 2023-09-27 18:22:12

在C#中避免装箱的一种方法是通过引用传递值类型。我读到一个通用方法也可以用来避免装箱。尽管仅仅为了避免拳击而编写一个通用方法似乎有点极端——如果类型总是一样的话。

我的问题是,如果编写代码是为了获得最佳性能并避免装箱,那么通过引用传递所有值类型(如int)是否合理,即使有问题的方法只处理对象而不创建它?这有什么缺点吗?

通过引用传递C#值类型以避免装箱

避免值类型装箱的最佳方法是:将它们用作值!

我认为你完全误解了这个提法。它所说的是,使用ref参数不会导致装箱。它并没有说这是avoid拳击的一种方式。

当一个值类型在引用上下文中使用时,例如被强制转换为Object时,就会发生装箱。本文指出,通过引用传递参数不能与引用类型的概念混淆,但混淆它们似乎正是您所做的。

280Z28总结:

换句话说,避免以下两种操作:

  1. 将值强制转换或赋值给object类型的变量(或将值作为object类型的方法参数的自变量传递)
  2. 将值强制转换或分配给接口类型的变量(如IEnumerable),或将值作为接口类型的方法参数的参数传递

该规则也有例外(例如,调用一些泛型方法),在某些情况下,装箱可能会发生在其他上下文中,但当您试图避免对值类型进行不必要的装箱时,这些是需要注意的主要情况。