По какому критерию диапазон применяется к массивам и строкам в 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
, так далее.
Что касается тех типов, которые не поддерживают доступ к элементам по индексу, разумно, что они не поддерживают индексы и диапазоны.