C#8中的数组和字符串应用哪个标准范围?

C#8中的数组和字符串应用哪个标准范围?,c#,c#-8.0,C#,C# 8.0,我正在查看C#8范围,无法理解该范围的应用程序是如何仅限于数组和字符串的 我认为它与接口数组实现有某种联系。它实现了ICloneable、IList、ICollection、IEnumerable、isstructuralcomparable、isstructuralequatable、IList、ICollection、IEnumerable、IReadOnlyList、IReadOnlyCollection但当我将new int[0]强制转换为其中任何一个并尝试在其上使用范围时,就会出现编译

我正在查看C#8范围,无法理解该范围的应用程序是如何仅限于数组和字符串的

我认为它与接口数组实现有某种联系。它实现了
ICloneable、IList、ICollection、IEnumerable、isstructuralcomparable、isstructuralequatable、IList、ICollection、IEnumerable、IReadOnlyList、IReadOnlyCollection
但当我将
new int[0]
强制转换为其中任何一个并尝试在其上使用范围时,就会出现编译错误(无法应用索引或无法从索引转换为int)


它是否以某种方式硬编码为仅与数组和字符串一起使用,或者我遗漏了一些内容?

只有最初支持
计数(或
长度
)和
项[int index]
属性的类型才能支持
项[index index index]
项[Range-Range]
。这包括数组、
列表、字符串、
Span


对于那些不支持按索引访问项的类型,它们不支持索引和范围是合理的。

CLR遵循的规则与我们的不同。这只是一些C#功能需要框架中的特定类型。例如,插值字符串基于
FormattableString
类e
foreach
语句使用了
IEnumerable
IEnumerator
接口。use语句使用了
IDisposable
接口。还没有玩过C#8…但是你试过
int[1]
或更大的值?在我看来,不能在元素为零的数组上指定一个范围,因为上下数字表示起始索引和结束索引。如果需要其他值,为什么不使用新的结构(索引)和是通过使用扩展方法实现的,因此扩展方法可能只为少数类型(数组、字符串)定义