在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