gpt4 book ai didi

.net - IEnumerable 表示 IEnumerable 序列的 "rest"

转载 作者:行者123 更新时间:2023-12-01 10:14:03 26 4
gpt4 key购买 nike

如果我正在穿过 IEnumerable<T> , 有没有办法得到一个新的 IEnumerable<T>表示当前项目之后的剩余项目。

比如我想写一个扩展方法IEnumerator<T>.Remaining() :

IEnumerable<int> sequence = ...
IEnumerator<int> enumerator = sequence.GetEnumerator();

if (enumerator.MoveNext() && enumerator.MoveNext()) {
IEnumerable<int> rest = enumerator.Remaining();
// 'rest' would contain elements in 'sequence' start at the 3rd element
}

我在考虑一种单链表的集合,所以应该有一种方法来表示任何剩余的元素,对吧?我在 IEnumerable<T> 上都看不到任何方法可以做到这一点或 IEnumerator<T> ,所以它可能与元素的潜在无界、不确定序列的概念不相容。

最佳答案

如果必须使用IEnumerator<T>而不是 IEnumerable<T> (所有好的扩展方法都在这里)这里有两个简单的方法。

这个只能枚举一次(并且绑定(bind)到原始可枚举,这意味着如果另一个线程更改源列表,您可能会以异常结束):

public static IEnumerable<T> Remaining<T>( this IEnumerator<T> value ) {
while( value.MoveNext() ) {
yield return value.Current;
}
}

这个构建了一个列表并且可以重复枚举(并且与原始枚举器断开连接,因此您不必担心源 IEnumerable 发生变化):

public static IEnumerable<T> Remaining<T>( this IEnumerator<T> value ) {
List<T> list = new List<T>();
while( value.MoveNext() ) list.Add( value.Current );

return list;
}

关于.net - IEnumerable<T> 表示 IEnumerable<T> 序列的 "rest",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com