По какому критерию диапазон применяется к массивам и строкам в C#8?

Я просматриваю C#8 диапазоны и не могу понять, как именно применение Range ограничено только массивами и строками.

Я думал, что это как-то связано с реализациями массива интерфейса. Это реализует ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable, IList<T>, ICollection<T>, IEnumerable<T>, IReadOnlyList<T>, IReadOnlyCollection<T> но когда я снимаю new int[0] к любому из них и попытайтесь использовать диапазон на нем, появляется ошибка компиляции (либо невозможно применить индекс, либо невозможно преобразовать из индекса в int).

Это как-то жестко запрограммировано для использования только с массивами и строками, или я что-то пропустил?

0 ответов

Только типы, которые изначально поддерживают Count (или Length) а также Item[int index] свойства могут поддерживать Item[Index index] а также Item[Range range]. Сюда входят массивы,List, строка, Span, так далее.

Что касается тех типов, которые не поддерживают доступ к элементам по индексу, разумно, что они не поддерживают индексы и диапазоны.

Другие вопросы по тегам