通过引用传递C#值类型以避免装箱
本文关键字:类型 引用 | 更新日期: 2023-09-27 18:22:12
在C#中避免装箱的一种方法是通过引用传递值类型。我读到一个通用方法也可以用来避免装箱。尽管仅仅为了避免拳击而编写一个通用方法似乎有点极端——如果类型总是一样的话。
我的问题是,如果编写代码是为了获得最佳性能并避免装箱,那么通过引用传递所有值类型(如int)是否合理,即使有问题的方法只处理对象而不创建它?这有什么缺点吗?
避免值类型装箱的最佳方法是:将它们用作值!
我认为你完全误解了这个提法。它所说的是,使用ref
参数不会导致装箱。它并没有说这是avoid
拳击的一种方式。
当一个值类型在引用上下文中使用时,例如被强制转换为Object时,就会发生装箱。本文指出,通过引用传递参数不能与引用类型的概念混淆,但混淆它们似乎正是您所做的。
280Z28总结:
换句话说,避免以下两种操作:
- 将值强制转换或赋值给
object
类型的变量(或将值作为object
类型的方法参数的自变量传递) - 将值强制转换或分配给接口类型的变量(如
IEnumerable
),或将值作为接口类型的方法参数的参数传递
该规则也有例外(例如,调用一些泛型方法),在某些情况下,装箱可能会发生在其他上下文中,但当您试图避免对值类型进行不必要的装箱时,这些是需要注意的主要情况。