草庐IT

ienumerator

全部标签

C# 关于 IEnumerable<T>.Aggregate

我做了一些关于IList.Aggregate()的测试,但答案对我来说没有意义。ListData1=newList{1,0,0,0,0};varresult=Data1.Aggregate((total,next)=>total+total);结果是16.我预计它会是32.谁能解释一下? 最佳答案 Aggregate不会对列表中的第一个元素运行回调。相反,第一个元素用作累加器的初始值(total)。因此,您的回调仅运行四次,而不是五次,并且24=16。 关于C#关于IEnumerable

c# - Parallel.Foreach 中的 block 分区 IEnumerable

有谁知道让Parallel.Foreach循环使用block分区的方法,我相信默认情况下是范围分区。使用数组时这看起来很简单,因为您只需创建一个自定义分区程序并将负载平衡设置为true。由于直到运行时才知道IEnumerable中的元素数量,因此我似乎无法找到一种让block分区起作用的好方法。如有任何帮助,我们将不胜感激。谢谢!我尝试在每个对象上执行的任务需要花费截然不同的时间来执行。最后我通常要等待几个小时等待最后一个线程完成它的工作。我想要实现的是让并行循环请求分block进行,而不是为每个线程预先分配项目。 最佳答案 如果你

c# - 返回一个通用的 IEnumerable<T>

我正在摆弄泛型和IEnumerableabit,但我有点卡住了。这是我正在尝试做的事情:我想要一个返回任何集合类型的方法-实现IEnumerable(?)-(例如:List,Stack,Queue,...)此外,我希望能够返回任何数据类型的任何集合类型。所以我希望这个方法能够返回List,以及Stack,以及List……等等等等。publicIEnumerablereturnSomething(){StackstackOfInts=newStack();ListlistOfStrings=newList();returnstackOfInts;}这是我迄今为止尝试过的。但是这不起作用,

c# - 使用 IEnumerable 与 ICollection 与 IList 的自定义集合

我需要设计自己的定制GenericCollection类(class)。现在我有很多选择可以使用IEnumerable导出它,ICollection,和IList,稍后会提供一些附加功能。如果我选择IEnumerable,我有点困惑我可能需要声明对象以实际保存集合,就像在这种情况下一样_list.publicclassGenericCollection:IEnumerable{privateList_list;//...}但如果我选择ICollection或IList,我不需要申报List对象,因为它是隐式可用的。publicclassGenericCollection:IList{/

c# - IEnumerable<T>.Reverse 是如何工作的?

我正在检查反射器中的代码,但我还没有发现它如何向后枚举集合?既然没有计数信息,枚举总是从集合的“开始”开始,对吧?这是.NET框架的缺点吗?成本是否比常规枚举高? 最佳答案 简而言之,它缓冲所有内容,然后向后遍历。效率不高,但从那个角度来看,OrderBy也不是。在LINQ-to-Objects中,有缓冲操作(Reverse、OrderBy、GroupBy等)和非缓冲操作(Where、Take、Skip等)。作为非缓冲的例子Reverse使用IList实现,考虑:publicstaticIEnumerableReverse(this

c# - 在 .NET 中,使用 "foreach"迭代 IEnumerable<ValueType> 的实例会创建副本吗?那么我应该更喜欢使用 "for"而不是 "foreach"吗?

在.NET中,使用“foreach”迭代IEnumerable的实例会创建副本吗?那么我应该更喜欢使用“for”而不是“foreach”吗?我写了一些代码来证明这一点:structValueTypeWithOneField{privateInt64field1;}structValueTypeWithFiveField{privateInt64field1;privateInt64field2;privateInt64field3;privateInt64field4;privateInt64field5;}publicclassProgram{staticvoidMain(strin

c# - 枚举本身不是 IEnumerable 的集合?

当您想递归枚举一个分层对象,根据某些条件选择一些元素时,有许多技术示例,例如“扁平化”,然后使用Linq进行过滤:就像在这里找到的那​​些:linktext但是,当您枚举诸如Form的Controls集合或TreeView的Nodes集合之类的东西时,我一直无法使用这些类型的技术,因为它们似乎需要一个参数(扩展方法)是一个IEnumerable集合:传入SomeForm.Controls不会编译。我发现的最有用的东西是:linktext它确实为您提供了Control.ControlCollection的扩展方法,其结果为IEnumerable,然后您可以将其与Linq一起使用。我已经修

c# - 是否有一个 IEnumerable 实现只迭代一次它的源代码(例如 LINQ)?

提供的items是LINQ表达式的结果:varitems=fromiteminItemsSource.RetrieveItems()where...假设每个项目的生成需要一些不可忽略的时间。两种操作模式是可能的:使用foreach将允许开始处理集合开头的项目,这比最后可用的项目快得多。然而,如果我们想稍后再次处理同一个集合,我们将不得不复制保存它:varstoredItems=newList();foreach(variteminitems){Process(item);storedItems.Add(item);}//Laterforeach(variteminstoredItems

c# - 添加到 IEnumerable 的代码

我有一个这样的枚举器IEnumerablepage;如何向其中添加页面(例如:D:\newfile.txt)?我尝试了Add、Append、Concat等,但对我没有任何效果。 最佳答案 是的,这是可能的可以将序列(IEnumerables)连接在一起并将连接结果分配给新序列。(您不能更改原始序列。)内置Enumerable.Concat()只会连接另一个序列;但是,很容易编写一个扩展方法,让您可以将标量连接到序列。以下代码演示:usingSystem;usingSystem.Collections.Generic;usingSys

c# - 创建 3 个 IEnumerables 的联合时实现 O(n) 性能的最简单方法是什么?

假设a、b、c都是List我想创建一个未分类的联合。虽然性能不是非常关键,但它们每个可能有10,000个条目,所以我热衷于避免O(n^2)解决方案。AFAICT,就不同类型而言,MSDN文档并未说明联合的性能特征。我的直觉告诉我,如果我只是做a.Union(b).Union(c),这将花费O(n^2)时间,但是newHashset(a).Union(b).Union(c)将是O(n)。有没有人有任何文件或指标来证实或否定这个假设? 最佳答案 你应该使用Enumerable.Union因为它和HashSet一样高效方法。复杂度为O(n