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

时间:2014-09-17 23:55:29

标签: c# performance parameter-passing

避免在C#中装箱的一种方法是pass the value type by reference。我读过generic method can also be used to avoid boxing。虽然仅仅为了避免装箱而编写通用方法似乎有点极端 - 如果类型总是相同的。

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

1 个答案:

答案 0 :(得分:6)

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

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

在参考上下文中使用值类型时会发生拳击,例如强制转换为Object。本文说,不能将引用参数传递给参考类型的概念,但是混淆它们似乎正是你所做的。

汇总280Z28:

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

  1. 将值转换或赋值给object类型的变量(或将值作为object类型的方法参数的参数传递。)
  2. 将值转换或赋值给 interface 类型的变量(例如IEnumerable),或者将值作为参数传递给作为接口类型的方法参数。
  3. 此规则有例外(例如调用一些通用方法),并且有些情况下可以在其他上下文中进行装箱,但这些是在尝试避免不必要的值类型装箱时要注意的主要情况