根据我到目前为止所学到的,foreach循环中没有index
。那么,当在visual studio中检查对象时,有人能告诉我这个索引字段是什么吗?
显然,它不是for循环中的索引,因为该数字高于收集计数。
这是代码,我正在检查group
变量。
static string LookAndSay (string input) {
var groups = new Regex("([0-9])\\1*").Matches(input);
var result = String.Empty;
foreach (var group in groups)
result += String.Concat(group.ToString().Length, group.ToString()[0]);
return result;
}
答案 0 :(得分:2)
因为您在groups
上循环,其中包含System.Text.RegularExpressions.Match,而Index属性属于该类。
来自MSDN的说明
原始字符串中第一个字符所在的位置 找到捕获的子串。(继承自Capture。)
答案 1 :(得分:0)
它是当前实现IEnumerable的类的枚举器。
请点击此处了解更多详情:
How do you get the index of the current iteration of a foreach loop?
foreach
用于迭代实现IEnumerable
的集合。它通过调用集合上的GetEnumerator
来执行此操作,该集合将返回Enumerator
。
此枚举器具有方法和属性:
Current
返回Enumerator当前所在的对象,MoveNext
将Current
更新为下一个对象。
显然,索引的概念对于枚举的概念来说是陌生的,并且无法完成。
因此,大多数集合都可以使用索引器和for循环结构遍历。
与使用局部变量跟踪索引相比,我更倾向于在这种情况下使用for循环。
答案 2 :(得分:0)
因此,Index
是您正在检查的任何对象的属性。这可能与foreach
有关,也可能没有任何关系 - 我们无法分辨。但是对于它的价值:foreach
通过在您正在循环的集合中调用继承的GetEnumerator
方法来进行操作。 GetEnumerator
方法告诉它下一个要获取的对象(内部,它可能使用该索引值),返回Current对象,并指定当前对象的类型。更多相关内容:https://msdn.microsoft.com/en-us/library/aa288257(v=vs.71).aspx