草庐IT

enumerator

全部标签

c# - 帮助理解 Enumerable.Join 方法

昨天我postedthisquestion关于在Join()方法中使用lambda来检查2个实体中是否存在2个条件。我收到了关于这个问题的答案,效果很好。我想在阅读了关于Enumerable.Join()方法的MSDN文章之后,我会确切地理解发生了什么,但我没有。有人可以帮我理解下面代码中发生了什么(特别是Join()方法)吗?提前致谢。if(db.TableA.Where(a=>a.UserID==currentUser).Join(db.TableB.Where(b=>b.MyField==someValue),o=>o.someFieldID,i=>i.someFieldID,(

c# - 为什么 Enumerable.Range 实现 IDisposable?

只是想知道为什么Enumerable.Range工具IDisposable.我明白为什么IEnumerator确实如此,但是IEnumerable不需要它。(我在玩我的.Memoise()实现时发现了这一点,它有类似的语句if(enumerableisIDisposable)((IDisposable)enumerable).Dispose();出于好奇,我在它的“sourcefinished”方法中放置了一个断点,并由测试触发。) 最佳答案 Enumerable.Range在其方法主体中使用yieldreturn。yieldret

c# - Enumerable.Average 和 OverflowException

也许是一个无用的问题:publicstaticdoubleAverage(thisIEnumerablesource,Funcselector)上述方法抛出的异常之一也是OverflowException:序列中元素的总和大于Int64.MaxValue。我假设此异常的原因是平均值的总和是使用long类型的变量S计算的?但是既然返回值是double类型,为什么设计者不选择让S也是double类型呢?谢谢 最佳答案 因为这个特定的重载知道您开始使用int值,所以它知道您没有使用十进制值。将您的每个值转换为double然后将double

c# - C#中 'enumerator'的定义

C#中的枚举数是什么意思? 最佳答案 枚举器可帮助您枚举(迭代)项目集合。您可以通过简单地查看membersoftheIEnumeratorInterface来推断其用途。.更具体地说,枚举器确切地知道您在集合中的位置(当前项)和下一项的位置(MoveNext方法)。查看关于迭代器的维基百科文章:Iterator-Wikipedia 关于c#-C#中'enumerator'的定义,我们在StackOverflow上找到一个类似的问题: https://stac

c# - 为什么 Enumerable.Range 比直接 yield 循环更快?

下面的代码正在检查执行相同解决方案的三种不同方法的性能。publicstaticvoidMain(string[]args){//forloop{Stopwatchsw=Stopwatch.StartNew();intaccumulator=0;for(inti=1;iaccumulator+n);sw.Stop();Console.WriteLine("time={0};result={1}",sw.ElapsedMilliseconds,ret);}//self-madeIEnumerable{Stopwatchsw=Stopwatch.StartNew();varret=GetI

c# - 从可枚举中获取下一个 N 个元素

上下文:C#3.0、.Net3.5假设我有一个生成随机数的方法(永远):privatestaticIEnumerableRandomNumberGenerator(){while(true)yieldreturnGenerateRandomNumber(0,100);}我需要将这些数字以10个为一组进行分组,所以我想要这样的东西:foreach(IEnumerablegroupinRandomNumberGenerator().Slice(10)){Assert.That(group.Count()==10);}我已经定义了Slice方法,但我觉得应该已经定义了一个。这是我的切片方法,

c# - 使用 IEnumerator 遍历列表

假设我有一个员工实例列表,employeeList.我可以像这样遍历它们:IEnumeratorenumerator=employeeList.GetEnumerator();while(enumerator.MoveNext()){Console.Write(enumerator.Current+"");}我有三个问题:我对枚举器的工作原理有一个大概的了解,就像C++中的迭代器一样。但我不明白MoveNext()方法(如C++中的itr++),因为该方法首先检查条件(是否在最后一个元素中)。假设我们使用enumerator.Current访问第一个元素:我认为它实际上已经“移动”到列

C# - 如何从枚举器创建数组

在C#中,从对象枚举器创建对象数组的最优雅方法是什么?例如在这种情况下,我有一个可以返回字节的枚举器,所以我想将其转换为byte[]。编辑:创建枚举器的代码:IEnumeratorenumerator=anObject.GetEnumerator(); 最佳答案 好的,所以,假设您有一个实际的枚举器(IEnumerator),您可以使用while循环:varlist=newList();while(enumerator.MoveNext())list.Add(enumerator.Current);vararray=list.ToA

c# - 将非通用集合转换为通用集合的最佳方法

将非通用集合转换为通用集合的最佳方法是什么?有没有办法对其进行LINQ?我有以下代码。publicclassNonGenericCollection:CollectionBase{publicvoidAdd(TestClassa){List.Add(a);}}publicclassConvertTest{publicstaticListConvertToGenericClass(NonGenericCollectioncollection){//Askforhelphere.}}谢谢! 最佳答案 因为您可以保证它们都是TestCla

c# - Enumerable.Range 中的 A 到 Z 字符列表

我想从Enumerable.Range中创建一个列表。这个代码正确吗?SurnameStartLetterList=newList();Enumerable.Range(65,26).ToList().ForEach(character=>SurnameStartLetterList.Add((char)character));或者是否有更好的方法来制作此类列表? 最佳答案 大概是这样的?varsurnameList=Enumerable.Range('A','Z'-'A'+1).Select(c=>(char)c).ToList(