簡體   English   中英

避免在泛型類中裝箱和拆箱

[英]Avoid boxing & unboxing in generic class

下面是一些快速代碼來說明我的問題。 有什么辦法可以避免這種明顯不必要的拳擊/拆箱?

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

這是處理此處所做操作的唯一方法(為特定的封閉泛型類型返回非默認值)。

使它成為一個靜態字段。

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

  public T TestMethod()
  {
    return TrueIfBoolean;
  }
}

這樣,裝箱/拆箱只發生一次。 即使在初始代碼中,這種優化也完全可能由運行時完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM