6

下面是一些快速代码来说明我的问题。有什么办法可以避免这种明显不必要的装箱/拆箱?

public class TestClass<T>
{
  public T TestMethod()
  {
    if (typeof(T) == typeof(bool))
    {
      return true; // doesn't work
      return (T)(object)true; // works, but any way to avoid this?
    }

    return default(T);
  }
}
4

2 回答 2

4

这是处理您在这里所做的事情的唯一方法(返回特定封闭泛型类型的非默认值)。

于 2012-11-08T21:18:29.367 回答
-1

使其成为静态字段。

public class TestClass<T>
{
  static T TrueIfBoolean = typeof(T) == typeof(bool) ? (T)(object)true : default(T)

  public T TestMethod()
  {
    return TrueIfBoolean;
  }
}

这样,装箱/拆箱只发生一次。即使在您的初始代码中,这种优化也完全有可能由运行时完成。

于 2012-11-08T22:18:16.730 回答