2016-09-13 2 views
0

Ich habe eine benutzerdefinierte Auflistungsklasse, die IDictionary<TKey, TValue> implementiert und tatsächlich System.Collections.Generic.Dictionary<TKey, TValue> als zugrunde liegenden Speicher für meine benutzerdefinierte Sammlung verwendet. Ich wollte eine implizite Umwandlung in Dictionary und eine explizite Umwandlung daraus in meine benutzerdefinierte Klasse.Wrapping oder Kopieren während benutzerdefinierter Umwandlungen

Was ich nicht ganz sicher bin, wenn -Dictionary<TKey, TValue> Gießen soll ich sein, um die zugrunde liegende Auflistung zurückgeben oder den darunter liegenden Wörterbuch auf ein neues Objekt kopieren und diesen Wert zurückgeben? Ebenso in umgekehrter Richtung, vonDictionary<TKey, TValue>, sollte ich das gegossene Wörterbuch verpacken oder die Werte in ein neues Wörterbuch kopieren?

Meine Implementierung ist nicht unveränderbar, sondern fügt nur einige zusätzliche Features hinzu. Ich persönlich kann kein Problem sehen, das sich aus beiden Umstellungsmethoden ergeben würde. In diesem speziellen Fall verursacht eine Änderung der zugrunde liegenden Sammlung kein Problem mit dem Status der umhüllten Sammlung. Gibt es daher einen nicht leistungsbasierten Grund, eine Methode gegenüber der anderen zu verwenden?

Beispiel Klasse:

public class MyDictionary<TKey, TValue> : IDictionary<TKey, TValue> 
{ 
    ... 
    public static implicit operator Dictionary<TKey, TValue>(MyDictionary<TKey, TValue> myDict) 
    { 
     return myDict.dictionary; 
    } 

    //OR 

    public static implicit operator Dictionary<TKey, TValue>(MyDictionary<TKey, TValue> myDict) 
    { 
     return new Dictionary(myDict); 
    } 

    ... 
} 

PS: Ich bin nicht für "best-practice" oder eine subjektive Antwort suchen. Wenn die Antwort "NEIN ist, gibt es keinen objektiven, nicht leistungsgestützten Unterschied bei der Verwendung der einen oder der anderen Methode", was eine akzeptable Antwort ist.

Antwort

1

Abgesehen von der Leistung, ist die einzige Frage die Wandlungsfähigkeit. Da Ihre Implementierung nicht unveränderbar ist, ist der erste Weg wahrscheinlich korrekter, da sie eine direkte Veränderbarkeit des zugrunde liegenden Wörterbuchs erlaubt.

Verwandte Themen