Was ist der beste Weg, um eine Liste als Readonly aufzudecken?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Was ist der beste Weg, um eine Liste als Readonly aufzudecken?

Post by Anonymous »

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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post