2016-04-07 28 views
1

Ich schreibe etwas Speicher-sensitiven Code, wo ich aus verschiedenen Gründen einige Werttypen boxen muss. Außerdem benötige ich nach einigen Aufwärmvorgängen neue Heapzuweisungen. Wenn ich die Werte N in Boxen eingegeben habe, benötigt mein Algorithmus keinen Speicher mehr, aber diese Werte müssen häufig aktualisiert werden. Ich möchte die bereits auf dem Heap erstellten Boxen wiederverwenden können.Wie wird eine Box wiederverwendet?

Der folgende Code schlägt vor, dass Boxen nicht wiederverwendet werden (ich kann mir vorstellen, warum nicht). Gibt es eine andere Technik, bei der ich jede Box wiederverwenden kann?

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

Boxen machen nicht den Wert Typ (d. H. Int) zu einem Referenztyp. Sie können eine Klasse verwenden, um den Werttyp zu speichern und ihn wiederzuverwenden. – Eric

Antwort

0

Meine Lösung war die Einführung eines expliziten Referenztyps als wiederverwendbare Box.

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