jjzjj

GetEnumerator

全部标签

c# - linq Last() 如何确定最后一项?

我不明白Current怎么可以为null而LINQ函数Last()怎么可以返回一个对象。我认为Last使用GetEnumerator并一直持续到current==null并返回对象。然而,正如您所见,第一个GetEnumerator().Current为空,最后一个以某种方式返回一个对象。linqLast()是如何工作的?items.GetEnumerator().Currentitems.Last() 最佳答案 来自使用Reflector在System.Core.dll上:publicstaticTSourceLast(thisI

c# - 为什么 IEnumerator<T> 会影响 IEnumerable<T> 的状态,即使 ienumerator 从未到达终点?

我很好奇为什么以下内容会在“最后”分配时抛出错误消息(文本阅读器关闭异常):IEnumerabletextRows=File.ReadLines(sourceTextFileName);IEnumeratortextEnumerator=textRows.GetEnumerator();stringfirst=textRows.First();stringlast=textRows.Last();但是以下执行正常:IEnumerabletextRows=File.ReadLines(sourceTextFileName);stringfirst=textRows.First();str

c# - IEnumerable<int> 还需要非通用 IEnumerator 吗?

3个问题:1)为什么输出取自NON泛型函数?2)为什么我必须同时实现非泛型函数?3)如果我想查看通用函数输出(int的),我需要做什么? 最佳答案 foreach关键字不需要集合来实现IEnumerable根本;相反,它会调用任何已定义的GetEnumerator方法。IEnumerable工具IEnumerable出于兼容性原因。你应该实现IEnumerable.GetEnumerator()显式地让普通方法返回IEnumerator.如果类(class)有正常的GetEnumerator()方法(与显式接口(interface)

c# - 使用数组实现 IEnumerable

这可能是一个简单的语法问题,但我想不出来。通常,我会这样做:publicclassOrderBook:IEnumerable{privatereadonlyListPriceLevels=newList();publicIEnumeratorGetEnumerator(){returnPriceLevels.GetEnumerator();}IEnumeratorIEnumerable.GetEnumerator(){returnPriceLevels.GetEnumerator();}}但我不想使用列表,而是使用数组-如下所示:publicclassArrayOrderBook:IE

c# - 模拟 IEnumerable<T> 类型的 GetEnumerator() 方法

以下测试用例在rhino模拟中失败:[TestFixture]publicclassEnumeratorTest{[Test]publicvoidShould_be_able_to_use_enumerator_more_than_once(){varnumbers=MockRepository.GenerateStub();numbers.Stub(x=>x.GetEnumerator()).Return(newList{1,2,3}.GetEnumerator());varsut=newObjectThatUsesEnumerator();varcorrectResult=sut.

c# - 从枚举转换为 IEnumerable

你能帮我修改这段代码吗usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Reflection;namespaceNTSoftHRM{//------------------------------------------------------------------------publicclassEnumValueList:IEnumerable{//--------------------------------------------------------------

c# - 如果我只能定义一个 GetEnumerator,为什么要实现 IEnumerable(T)?

更新:我感谢所有的评论,这些评论基本上包含了一致的反对意见。虽然提出的每一个反对意见都是有效的,但我觉得棺材上的最终钉子是Ani'sastuteobservation最终,即使是这个想法表面上提供的一个微小好处——消除样板代码——也被这个想法本身需要其拥有样板代码。所以,是的,相信我:这将是一个坏主意。只是为了在某种程度上挽救我的尊严:我可能会为了争论而夸大它,但我从来没有真正接受过这个想法-只是想听听其他人对此有何评论。诚实。在您将这个问题视为荒谬之前,我请您考虑以下几点:IEnumerable继承自*IEnumerable,这意味着任何实现IEnumerable的类型通常必须实现两

c# - 为从 List<string> 继承的集合实现 GetEnumerator()

我正在尝试实现FilePathCollection。它的项目将是简单的文件名(没有路径-例如“image.jpg”)。通过foreach循环使用集合后,它应该返回通过与baseDirectory连接创建的完整路径。我怎样才能做到这一点?publicclassFilePathCollection:List{stringbaseDirectory;publicFilePathCollection(stringbaseDirectory){this.baseDirectory=baseDirectory;}newpublicSystem.Collections.IEnumeratorGetE

c# - 如何保留仅包含最后 n 个对象的列表?

我想对特定方法进行一些性能测量,但我想平均完成所需的时间。(这是一个C#Winforms应用程序,但这个问题很可能适用于其他框架。)我有一个秒表,我在方法开始时重置它并在结束时停止。我想将最后10个值存储在列表或数组中。添加的每个新值都应将最旧的值推离列表。我会定期调用另一个方法来计算所有存储值的平均值。我认为这个构造是一个循环缓冲区是否正确?我怎样才能创建这样一个具有最佳性能的缓冲区?现在我有以下内容:ListPerfTimes=newList(10);//...privatevoidDoStuff(){MyStopWatch.Restart();//...MyStopWatch.S

c# - 为什么 foreach 找不到我的 GetEnumerator 扩展方法?

我正在努力使一些代码更具可读性。例如foreach(varrowintable){...}而不是foreach(DataRowrowintable.Rows){...}.为此,我创建了一个扩展方法:namespaceSystem.Data{publicstaticclassMyExtensions{publicstaticIEnumerableGetEnumerator(thisDataTabletbl){foreach(DataRowrintbl.Rows)yieldreturnr;}}}但编译器仍然抛出foreachstatementcannotoperateonvariables
12