Tag: ienumerable

转换为IEnumerable ?

我写了这个扩展方法: public static class A { public static IEnumerable AsDynamic(this IEnumerable f) { foreach (var element in f) { yield return (dynamic) element; } } } 并测试了它: List l = new List(){1,2,3}; Console.WriteLine ( l.AsDynamic().GetType()); 但是输出是: typeof (IEnumerable) 为什么它不是typeof (IEnumerable) ? 我怎么能让它像它一样?

是否可以克隆IEnumerable 实例,保存迭代状态的副本?

我想创建一个IEnumerator的副本,以便我可以从集合中的特定位置重新启动枚举过程。 显然,对于实现IList集合,这样做没有任何好处,因为我们可以记住感兴趣的索引。 使用yield语句和Linq函数的组合是否有一种聪明的方法来完成此任务? 我找不到合适的Clone()方法来复制枚举器,并且希望避免使用Enumerable.Skip()将新的枚举器重新定位到所需的恢复点。 此外,我希望尽可能保持解决方案的通用性,而不必依赖任何具体集合中的状态。

nest产生以懒惰评估返回IEnumerable <IEnumerable >

我写了一个类似于String.Split的LINQ扩展方法String.Split 。 > new List(){3,4,2,21,3,2,17,16,1} > .SplitBetween(x=>x>=10) [3,4,2], [3,2], [], [1] 资源: // partition sequence into sequence of contiguous subsequences // behaves like String.Split public static IEnumerable<IEnumerable> SplitBetween(this IEnumerable source, Func separatorSelector, bool includeSeparator = false) { var l = new List(); foreach (var x in source) { if (separatorSelector(x)) { if (includeSeparator) { l.Add(x); […]

为什么不能克隆IEnumerator?

在C#中实现一个基本的Scheme解释器时,我惊恐地发现了以下问题: IEnumerator没有克隆方法! (或者更准确地说,IEnumerable不能为我提供“可克隆”枚举器)。 我想要的是什么: interface IEnumerator { bool MoveNext(); T Current { get; } void Reset(); // NEW! IEnumerator Clone(); } 我无法想出IEnumerable的实现,它无法提供有效的可复制IEnumerator(向量,链表等等)所有能够提供IEnumerator的Clone()的简单实现,如上所述……它会比提供Reset()方法更容易!)。 缺少克隆方法意味着枚举序列的任何function/递归习惯用法都不起作用。 这也意味着我无法“无缝地”使IEnumerable的行为像Lisp“列表”(你使用car / cdr递归枚举)。 即唯一的实现“(cdr some IEnumerable )”将是非常低效的。 任何人都可以建议一个现实的,有用的IEnumerable对象的例子,它无法提供有效的“Clone()”方法吗? 是否存在“收益”构造的问题? 有人可以建议一个解决方法吗?

如何在我的实现IEnumerable 的Dictionary包装器类中实现IEnumerable?

我正在尝试为Dictionary创建一个包装器。 Dictionary实现IEnumerable<KeyValuePair> ,但我希望我的包装类实现IEnumerable 。 所以我尝试了这个: public class FooCollection : IEnumerable { private Dictionary fooDictionary = new Dictionary(); public IEnumerator GetEnumerator() { return fooDictionary.Values.GetEnumerator(); } // Other wrapper methods omitted } 但是我收到此错误: ‘FooCollection’没有实现接口成员’System.Collections.IEnumerable.GetEnumerator()’。 ‘FooCollection.GetEnumerator()’无法实现’System.Collections.IEnumerable.GetEnumerator()’,因为它没有匹配的返回类型’System.Collections.IEnumerator’。 但是我不明白这个错误,因为FooCollection.GetEnumerator()返回一个IEnumerator ,而IEnumerator是一个IEnumerator 。 编辑: 显式实现IEnumerator.GetEnumerator()的解决方案有效。 但是我现在想知道为什么当我在List上“去定义”时,我只看到GetEnumerator的一个定义: public List.Enumerator GetEnumerator(); 显然List可以有一个GetEnumerator方法,它返回实现IEnumerator和IEnumerator ,但我必须为每个方法都有一个方法? 编辑: 正如下面LukeH所回答的, List 确实包含了显式接口实现。 显然,Visual Studio在从元数据生成方法存根时不会列出那些。 (请参阅前一个问题: 为什么VS元数据视图不显示显式接口实现的成员 ) 在发布此问题之前,我曾尝试检查List (通过Visual […]

如何将可枚举集合附加到C#中的现有列表

我有三个函数返回IEnumerable集合。 现在我想将所有这些组合成一个List。 那么,有什么方法可以将IEnumerable中的项目附加到列表中。 我的意思是没有每个循环?

如何按索引对项目进行分组? C#LINQ

假设我有 var input = new int[] { 0, 1, 2, 3, 4, 5 }; 如何将它们分组成对? var output = new int[][] { new int[] { 0, 1 }, new int[] { 2, 3 }, new int[] { 4, 5 } }; 最好使用LINQ

调试IEnumerable方法

我有一个返回IEnumerable ,我正在尝试调试该方法中的代码。 每次我在调试期间单步执行Visual Studio中的代码时,它都会跳过相关方法。 当我在方法中放置一个断点时,它永远不会被击中。 代码肯定是运行的,因为我已经通过yield return来自方法的假T来测试。 是不可能以这种方式调试IEnumerable方法,还是我做错了什么?

如何将IEnumerable转换为IObservable?

我想在不使用Rx ToObservable()和ToEnumerable()方法的情况下将IEnumerable集合转换为IObservable集合。

将CollectionBase转换为可与Linq一起使用的List或数据类型

我正在使用Aspose单元来操作Excel电子表格。 API中的一种类型是电子表格中的图片集合,它源自CollectionBase: 请看这个链接: http : //www.aspose.com/documentation/.net-components/aspose.cells-for-.net/aspose.cells.pictures.html 我想将此类型转换为允许我使用Linq表达式的东西 有什么选择? 我想我可以迭代它并手动将其添加到new List但是有更好的方法吗? 我已经读过这个问题将IEnumerable 添加到派生自CollectionBase的类中 但我显然无法控制实现CollectionBace的类,因为它是第三方产品