Каков наилучший способ сделать List доступным только для чтения?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Каков наилучший способ сделать List доступным только для чтения?

Сообщение Anonymous »

Я много раз сталкивался с этой проблемой проектирования и так и не нашел решающего решения.

Я хочу предоставить коллекцию, которую можно редактировать в классе владельца< /code>, но доступен для чтения только для других общедоступных областей.

Пробная версия 1:

Код: Выделить всё

public class MyClass
{
private List _myList = new List();

public IEnumerable MyList { get { return _myList; } }
}
Проблема в том, что внешний код может просто вернуть его обратно в список и отредактировать, например:

Код: Выделить всё

var x = ((List)MyList);
Испытание 2:

Код: Выделить всё

public class MyClass
{
private List _myList = new List();

public IEnumerable MyList { get { return _myList.ToList(); } }
}
Таким образом мы предотвращаем внешние изменения, но создаем ненужные затраты на многократное копирование списка.

Испытание 3:

Код: Выделить всё

public class MyClass
{
private List _myList = new List();
private ReadOnlyCollection _roList =
new ReadOnlyCollection(_myList)

public IEnumerable MyList { get { return _roList; } }
}
Это стандартное решение, которое я использую в настоящее время, но ReadOnlyCollection примерно на 30 % медленнее:

Код: Выделить всё

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
Есть ли «идеальный» способ сделать это? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/132 ... s-readonly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»