在C#中获取Enumerator.Current的索引

可能重复:
(C#)获取当前foreach迭代的索引

早上好,

有什么办法可以在不使用辅助变量的情况下获取Enumerator的当前元素的索引(在这种情况下,字符串中的字符)? 我知道这或许会是,如果我用一个更容易while还是for cicle,而是通过使用枚举的字符串循环是更优雅...的情况下,唯一的缺点是,我真的需要每个人物的当前索引。

非常感谢你。


不, IEnumerator接口不支持这种功能。

如果你需要这个,你可以自己实现,或者使用像IList这样的不同界面。


不,没有。 如果你真的需要索引,最优雅的方法就是用循环。 使用迭代器模式实际上不太优雅(和较慢)。


Linq's Select有适合的重载。 但你可以使用这样的东西:

foreach(var x in "ABC".WithIndex())
{
    Console.Out.WriteLine(x.Value + " " + x.Index);
}

使用这些助手:

public struct ValueIndexPair<T>
{
    private readonly T mValue;
    private readonly int mIndex;

    public T Value { get { return mValue; } }
    public int Index { get { return mIndex; } }

    public override string ToString()
    {
        return "(" + Value + "," + Index + ")";
    }

    public ValueIndexPair(T value, int index)
    {
        mValue = value;
        mIndex = index;
    }
}

public static IEnumerable<ValueIndexPair<T>> WithIndex<T>(this IEnumerable<T> sequence)
{
    int i = 0;
    foreach(T value in sequence)
    {
        yield return new ValueIndexPair<T>(value, i);
        i++;
    }
}
链接地址: http://www.djcxy.com/p/52967.html

上一篇: Get index of Enumerator.Current in C#

下一篇: Get current index from foreach loop