Frage

Angenommen, wir haben eine generische Klasse mit einer privaten Liste.Wir können dafür sorgen, dass ein schreibgeschützter Wrapper dieser Liste auf mindestens zwei Arten zurückgegeben wird:

public class Test<T>
{
    public List<T> list = new List<T>();

    public IEnumerable<T> Values1
    {
        get
        {
            foreach (T i in list)
                yield return i;
        }
    }

    public IEnumerable<T> Values2
    {
        get
        {
            return list.AsReadOnly();
        }
    }
}

Beide Values1 Und Values2 Spiegeln Sie alle Änderungen in der zugrunde liegenden Sammlung wider und verhindern Sie, dass sie sich selbst ändert.

Welcher Weg, wenn vorzuziehen?Was sollte man beachten?Oder gibt es einen anderen besseren Weg?

War es hilfreich?

Lösung

Wenn nur ein IEnumerable<T> wird für die Ausgabe benötigt, ich bevorzuge:

public IEnumerable<T> Values
{
    return this.list.AsReadOnly();
}

Seit ReadOnlyCollection<T> implementiert IEnumerable<T>, bietet dies eine sichere Hülle um Ihre Objekte, ist aber dennoch flexibel und effizient und verhindert, dass eine Umwandlung Werte festlegen kann.

Sie können die interne Implementierung später jederzeit ändern, wenn Sie entscheiden, dass Sie in den Ergebnissen etwas anderes tun müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top