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;
  }
}

そうすれば、ボクシング/アンボクシングは1回だけ行われます。この種の最適化は、最初のコードでもランタイムによって実行される可能性もあります。

于 2012-11-08T22:18:16.730 に答える