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


Get index of Enumerator.Current in C#

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
(C#) Get index of current foreach iteration

早上好,

是否有任何方法可以在不使用辅助变量的情况下获取Enumerator当前元素(在这种情况下,是字符串中的字符)的索引?我知道如果我使用whileforcicle,这可能会更容易,但是使用枚举器循环字符串更优雅…这种情况唯一的缺点是我真的需要获取每个字符的当前索引。

非常感谢你。


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

如果您需要这样做,您要么自己实现它,要么使用一个不同的接口,如IList


不,没有。如果您真的需要索引,最优雅的方法是使用循环。使用迭代器模式实际上不那么优雅(而且更慢)。


Linq的Select有合适的过载。但是你可以使用这样的东西:

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

使用这些助手:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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++;
    }
}