2016-04-07 31 views
1

我正在寫一些內存敏感的代碼,其中由於各種原因,我必須包含一些值類型。此外,經過一些熱身之後,我需要淨新堆分配爲0.在裝箱了N值後,我的算法不需要更多存儲空間,但是這些值必須經常更新。我希望能夠重用已經在堆上創建的框。如何重用盒子?

下面的代碼表明盒子沒有被重用(我能想象爲什麼不)。是否有不同的技術,我可以重用每個盒子?

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     object x = 42; 
     object y = x; 
     x = 43; 
     bool isSameBox = Object.ReferenceEquals(x, y); 
     Console.WriteLine("Same box? {0}.", isSameBox); 
    } 
} 

// Output: "Same box? False." 
+0

裝箱不會將值類型(即int)設置爲引用類型。您可以使用類來存儲值類型並重用它。 – Eric

回答

0

我的解決方案是引入一個明確的引用類型作爲可重用的框。

public class ReusableBox<T> where T : struct 
{ 
    public T Value { get; set; } 

    public ReusableBox() 
    { 

    } 

    public ReusableBox(T value) 
    { 
     this.Value = value; 
    } 

    public static implicit operator T(ReusableBox<T> box) 
    { 
     return box.Value; 
    } 

    public static implicit operator ReusableBox<T>(T value) 
    { 
     return new ReusableBox<T>(value); 
    } 
}