检查foreach对象时的索引是什么

时间:2015-12-14 16:37:08

标签: c# .net

根据我到目前为止所学到的,foreach循环中没有index。那么,当在visual studio中检查对象时,有人能告诉我这个索引字段是什么吗? enter image description here

显然,它不是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;
        }

3 个答案:

答案 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

此枚举器具有方法和属性:

  • 的MoveNext()
  • 电流

Current返回Enumerator当前所在的对象,MoveNextCurrent更新为下一个对象。

显然,索引的概念对于枚举的概念来说是陌生的,并且无法完成。

因此,大多数集合都可以使用索引器和for循环结构遍历。

与使用局部变量跟踪索引相比,我更倾向于在这种情况下使用for循环。

答案 2 :(得分:0)

因此,Index是您正在检查的任何对象的属性。这可能与foreach有关,也可能没有任何关系 - 我们无法分辨。但是对于它的价值:foreach通过在您正在循环的集合中调用继承的GetEnumerator方法来进行操作。 GetEnumerator方法告诉它下一个要获取的对象(内部,它可能使用该索引值),返回Current对象,并指定当前对象的类型。更多相关内容:https://msdn.microsoft.com/en-us/library/aa288257(v=vs.71).aspx