避免在C#中装箱的一种方法是pass the value type by reference。我读过generic method can also be used to avoid boxing。虽然仅仅为了避免装箱而编写通用方法似乎有点极端 - 如果类型总是相同的。
我的问题是 - 如果编写代码以获得最佳性能并避免装箱,通过引用传递所有值类型(如int)是合理的 - 即使所讨论的方法仅处理对象而不是创建它?这有什么缺点吗?
答案 0 :(得分:6)
避免装箱值类型的最佳方法是:只需将它们用作值!
我认为你完全误读了这个参考。它说的是使用ref
参数不会导致装箱。它并没有说它是avoid
拳击的一种方式。
在参考上下文中使用值类型时会发生拳击,例如强制转换为Object。本文说,不能将引用参数传递给参考类型的概念,但是混淆它们似乎正是你所做的。
汇总280Z28:
换句话说,避免以下两个操作:
object
类型的变量(或将值作为object
类型的方法参数的参数传递。)IEnumerable
),或者将值作为参数传递给作为接口类型的方法参数。 此规则有例外(例如调用一些通用方法),并且有些情况下可以在其他上下文中进行装箱,但这些是在尝试避免不必要的值类型装箱时要注意的主要情况