jjzjj

ienumerator

全部标签

c# - 应该避免 IEnumerable 的 Count() 吗?

通常,我使用List,然后在我不再需要更新它们时将它们作为IEnumerable返回。但是,我遇到了一个问题,我实际上需要枚举它们但首先需要知道计数。IEnumerable会枚举每个项目并找到计数(O(N)),还是会依赖于List的Count属性(O(1))?此外,如果IEnumerable是LINQ查询的结果怎么办? 最佳答案 WillIEnumerableenumerateeveryitemandfindthecount(O(N)),orwillitrelyonList'sCountproperty(O(1))?它将使用Coun

c# - 异步任务<IEnumerable<T>> 抛出 "is not an iterator interface type"错误

仅当我使用async时,下面的代码才会抛出isnotaniteratorinterfacetypeawait并包装IEnumerable与任务。如果我删除asyncawait,它将与IEnumerable>一起使用.privateasyncTask>>GetTableDataAsync(CloudTablecloudTable,TableQuerytableQuery)whereT:ITableEntity,new(){TableContinuationTokencontineousToken=null;do{varcurrentSegment=awaitGetAzureTableDa

c# - IEnumerable 重复函数

我遇到了一个奇怪的问题。这里我重现了这个问题。Randomr=newRandom();Listx=newList{1,2,3,4,5,6};vare=x.OrderBy(i=>r.Next());varlist1=e.ToList();varlist2=e.ToList();boolb=list1.SequenceEqual(list2);Console.WriteLine(b);//printsfalse直到现在,我一直认为Linq函数是在调用时执行的。但是,在这种方法中,似乎在我调用ToList之后,Linq函数OrderBy再次执行。为什么会这样? 最

c# - IEnumerable<TSource> Concat<TSource> 是否保留元素的顺序?

假设有两个列表A和B,因此A=(1,2,3)和B=(4,5,6)。A.Concat(B)会保留顺序以便结果为(1,2,3,4,5,6)吗? 最佳答案 是的。IEnumerable.Concat只需将一个列表附加到另一个列表的末尾,即可将两个列表变成一个列表。每个列表中的顺序将被保留。 关于c#-IEnumerableConcat是否保留元素的顺序?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

c# - 我可以将 C# 函数标记为 "this function does not enumerate the IEnumerable parameter"吗?

同一可枚举的多次枚举对我们来说一直是一个性能问题,因此我们尝试在代码中消除这些警告。但是我们有一个通用的扩展函数来抛出空参数异常,它会生成很多这样的警告。它的签名看起来像这样:publicstaticvoidVerifyArgumentIsNotNull(thisTvalue,stringvalueName)whereT:class它所做的只是检查null并抛出一个格式良好且本地化(对于当时正在使用的任何人类语言)的异常。当此函数用于IEnumerable参数时,它会使代码分析警告IEnumerable可能的多次迭代,因为分析器不知道该函数的作用。我想在这个函数上加上一些标签,上面写着

c# - IList<T> 与 IEnumerable<T>。 IList<T> 或 IEnumerable<T> 哪个更有效

使方法返回IList的更有效方法是什么?或IEnumerable?IEnumerable它是不可变的集合,但是IList可变并包含许多有用的方法和属性。投IList至IEnumerable它只是引用副本:IListl=newList();IEnumerablee=l;投IEnumerable至List我们需要迭代每个元素或调用ToList()方法:IEnumerable.ToList();或者可以通过IEnumerable至List在其构造函数中某处执行相同迭代的构造函数。Listl=newList(e);您认为哪种情况效率更高?您在实践中更喜欢哪个? 最佳

c# - XDocument + IEnumerable 导致 System.Xml.Linq.dll 内存不足异常

基本上我有一个程序,当它开始时加载一个文件列表(如FileInfo),并为列表中的每个文件加载一个XML文档(如XDocument).程序然后从其中读取数据到容器类(存储为IEnumerables),此时XDocument超出范围。程序然后将数据从容器类导出到数据库。然而,在导出容器类超出范围后,垃圾收集器并未清理容器类,因为它存储为IEnumerable,似乎导致了XDocument留在内存中(不确定这是否是原因,但任务管理器显示XDocument中的内存未被释放)。由于程序循环遍历多个文件,最终程序抛出内存不足异常。为了缓解这种情况,我最终使用了System.GC.Collect(

C# - 如何在类上实现 IEnumerator

如何在此类上实现IEnumerator以便我可以在foreach循环中使用它。publicclassItems{privateDictionary_items=newDictionary();publicConfigurationthis[stringelement]{get{if(_items.ContainsKey(element)){return_items[element];}else{returnnull;}}set{_items[element]=value;}}}在此示例中,Configuration是一个具有少量属性的简单类。 最佳答案

c# - IEnumerable.Select() 可以跳过一个项目吗?

我有这个功能:publicIEnumerableEnumPrograms(){returndev.AudioSessionManager2.Sessions.AsEnumerable().Where(s=>s.GetProcessID!=0).Select(s=>{try{returnProcess.GetProcessById((int)s.GetProcessID).ProcessName;}catch(ArgumentException){returnnull;}});}try..catch是必需的,因为可能存在具有不再存在的PID的session。我想跳过它们。有没有办法从Se

c# - 如何将 IEnumerable<T> 添加到现有的 ICollection<T>

给定一个现有的ICollection实例(例如dest)从IEnumerable添加项目的最有效和可读的方法是什么?在我的用例中,我有某种实用方法Collect(IEnumerableitems)它返回一个新的ICollection来自items的元素,所以我按以下方式进行:publicstaticICollectionCollect(IEnumerableitems)whereT:ICollection{...ICollectiondest=Activator.CreateInstance();items.Aggregate(dest,(acc,item)=>{acc.Add(ite