C#8中的数组和字符串应用哪个标准范围?
我正在查看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]强制转换为其中任何一个并尝试在其上使用范围时,就会出现编译
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
类eforeach
语句使用了IEnumerable
和IEnumerator
接口。use语句使用了IDisposable
接口。还没有玩过C#8…但是你试过int[1]
或更大的值?在我看来,不能在元素为零的数组上指定一个范围,因为上下数字表示起始索引和结束索引。如果需要其他值,为什么不使用新的结构(索引)和是通过使用扩展方法实现的,因此扩展方法可能只为少数类型(数组、字符串)定义