Как реализовать универсальный IList с фиксированным размером в C # - PullRequest
0 голосов
/ 17 октября 2011

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

Интерфейс IList по какой-то причине не реализует свойство IsFixedSize.Итак, как лучше всего это сделать с помощью универсального интерфейса IList?Я мог бы просто позволить методам Insert, Remove и RemoveAt выбросить NotImplementedException, и я согласился бы с этим, но есть ли лучший, более приемлемый способ?

Тони

Ответы [ 3 ]

2 голосов
/ 17 октября 2011

Если вы не хотите, чтобы размер «списка» можно было изменять, просто используйте массив.

Если вы не хотите, чтобы коллекция была редактируемой, используйте ReadOnlyCollection<T>.

1 голос
/ 17 октября 2011

Одним из типичных способов было бы явное использование оскорбительных членов IList, таких как Add, Insert и Remove, чтобы они были недоступны для людей, если они фактически не преобразуют вашу вещь в IList. Вот как это делают массивы.

1 голос
/ 17 октября 2011

Вы можете использовать ReadOnlyCollection<T>, который является оберткой над вашим IList<T>, который позволяет только читать содержимое, но не добавлять или удалять:

var myList = new List<string>();
var readonlyList = new ReadOnlyCollection<string>(myList);
...