Ich war schon oft in diesem Designproblem und habe nie eine Killer -Lösung gefunden.public class MyClass
{
private List _myList = new List();
public IEnumerable MyList { get { return _myList; } }
}
< /code>
Das Problem dabei ist ein externer Code kann ihn einfach in die Liste < /code> und bearbeiten: < /p>
zurückgebenvar x = ((List)MyList);
< /code>
Versuch 2: < /strong> < /p>
public class MyClass
{
private List _myList = new List();
public IEnumerable MyList { get { return _myList.ToList(); } }
}
< /code>
Auf diese Weise verhindern wir eine externe Änderung, erstellen jedoch einen unnötigen Überkopf des Kopierens der Liste < /code> oft.public class MyClass
{
private List _myList = new List();
private ReadOnlyCollection _roList =
new ReadOnlyCollection(_myList)
public IEnumerable MyList { get { return _roList; } }
}
< /code>
Dies ist die Standardlösung, die ich derzeit verwende, aber ReadonlyCollection < /code> ist etwa 30% langsamer: < /p>
Debug Trace:
Use normal foreach on the ReadOnlyCollection
Speed(ms): 2520,3203125
Result: 4999999950000000
use.ForEach
Speed(ms): 1446,1796875
Result: 4999999950000000
Use normal foreach on the List
Speed(ms): 1891,2421875
Result: 4999999950000000
< /code>
Gibt es eine 'perfekte' Art, dies zu tun? Danke.
Was ist der beste Weg, um eine Liste als Readonly aufzudecken? ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Servieren Sie Dateien, ohne die Verzeichnisstruktur in Django aufzudecken
by Anonymous » » in Python - 0 Replies
- 8 Views
-
Last post by Anonymous
-