【发布时间】:2022-01-10 10:53:55
【问题描述】:
C# 8.0 引入了结构体System.Index 和System.Range
循环遍历System.Range 的最简洁方法是什么?
var owners = new string[] {"Alice", "Bob", "Charlie"};
var pets = new string[] {"Dog", "Cat", "Bird"};
foreach (var index in 1..3) {
var pet = pets[index];
var owner = owners[index];
Console.WriteLine($"{owner} owns a {pet}");
}
上面的foreach (var index in 1..3) {行是编译错误。
类型“System.Range”不能在“foreach”语句中使用,因为它既没有实现“IEnumerable”或“IEnumerable”,也没有合适的“GetEnumerator”方法,其返回类型具有“Current”属性和“MoveNext”方法
【问题讨论】:
-
值得注意的是,这种特殊的编码结构被称为反模式"parallel collections"。考虑重构以使用面向对象编程。
-
顺便说一句,使用两个数组只是为了展示一个用例。它可以传达“仅使用 for 循环”不是解决方案。
标签: c# foreach ienumerable c#-8.0