草庐IT

enumerator

全部标签

c# - 如何停止 Resharper 在 Enumerable.ToList 和 Select 建议之间切换

如果我使用Resharper代码清理功能,我会找到我的代码......varpersonInfos=persons.Select(Mapper.Map).ToList();改为...varpersonInfos=Enumerable.ToList(persons.Select(Mapper.Map));但随后Resharper为Enumerable.ToList提出了“Toextensionmethodinvocation”的建议,因此代码返回到...varpersonInfos=persons.Select(Mapper.Map).ToList();我已经检查了Resharper代码

c# - 为什么 Enumerable.Cast 不使用用户定义的转换?

比如说,我们有2个类:publicclassA{publicinta;}publicclassB{publicintb;publicstaticimplicitoperatorB(Ax){returnnewB{b=x.a};}}那为什么Aa=newA{a=0};Bb=a;//OKListlistA=newList{newA{a=0}};ListlistB=listA.Cast().ToList();//throwsInvalidCastException对于explicit运算符也是如此。P.S.:手动(单独)转换每个元素是可行的ListlistB=listA.Select(s=>s)

c# - 奇怪的 "Collection was modified after the enumerator was instantiated"异常

也许有人可以为我指出正确的方向,因为我对此一头雾水。我有一个函数可以简单地打印出类的LinkedList:LinkedListcomponents=newLinkedList();...privatevoidPrintComponentList(){Console.WriteLine("---ComponentList:"+components.Count+"entries---");foreach(Componentcincomponents){Console.WriteLine(c);}Console.WriteLine("------");}Component对象实际上有一个自定

c# - Enumerable.Sum() 溢出

嘿,我正在使用LINQ的Enumerable.Sum()扩展方法来计算哈希码,当代码变大时我遇到了OverflowExceptions问题.我尝试将调用放在uncheckedblock中,但这似乎没有帮助。该方法的MSDN文档说如果值太大就会抛出异常,但我检查了反射器,仅此而已:publicstaticintSum(thisIEnumerablesource){if(source==null){throwError.ArgumentNull("source");}intnum=0;foreach(intnum2insource){num+=num2;}returnnum;}基于此反编译

c# - 表达式/语句树

进一步更新问题我一直在尝试在.NET4中使用表达式树在运行时生成代码,并且一直在尝试通过构建表达式树来实现foreach语句。最后,表达式应该能够生成执行此操作的委托(delegate):Action>action=source=>{varenumerator=source.GetEnumerator();while(enumerator.MoveNext()){vari=enumerator.Current;//thebodyoftheforeachthatIdon'tcurrentlyhaveyet}}我提出了以下从IEnumerable生成BlockExpression的辅助方法

c# - 如何将 System.Linq.Enumerable.WhereListIterator<int> 转换为 List<int>?

在下面的示例中,我如何轻松转换eventScores至List这样我就可以将它用作prettyPrint的参数?Console.WriteLine("ExampleofLINQ'sWhere:");Listscores=newList{1,2,3,4,5,6,7,8};varevenScores=scores.Where(i=>i%2==0);Action,string>prettyPrint=(list,title)=>{Console.WriteLine("***{0}***",title);list.ForEach(i=>Console.WriteLine(i));};score

c# - Entity Framework : Precompiled Query for Enumerable. 包含

EntityFramework5+应该预编译所有查询。但是,对于诸如Listids;varentities=context.MyEntities.Where(x=>ids.Contains(x.Id)).ToArray();EntityFramework无法预编译查询,并且根据整个查询的复杂性,将表达式树解析为SQL可能会耗费数秒。有没有人找到解决方法来获取预编译查询?我真的不明白为什么会这么难;当然很难用参数来做,因为元素的数量可能不同,但是有像SQL这样的SQL就足够了SELECTa,b,cfromMyEntitiesWHEREcin__PLACEHOLDER__然后用实际的列表元

c# - C#中有没有懒惰的 `String.Split`

全部string.Split方法似乎返回一个字符串数组(string[])。我想知道是否有一个返回IEnumerable的惰性变体这样一个用于大字符串(或无限长度IEnumerable),当只对第一个子序列感兴趣时,可以节省计算量和内存。如果字符串是由设备/程序(网络、终端、管道)构建的,并且整个字符串因此不需要立即完全可用,那么它也可能很有用。这样就可以处理第一次出现的情况。.NETframework中有这样的方法吗? 最佳答案 你可以很容易地写一个:publicstaticclassStringExtensions{public

c# - LINQ 为什么 "Enumerable = Enumerable.Skip(N)"慢?

我在LINQ查询的性能方面遇到问题,因此我创建了一个简化的小示例来演示下面的问题。该代码采用一个随机的小整数列表,并返回分成几个较小列表的列表,每个列表总计10个或更少。问题是(正如我所写的那样)N的代码花费的时间呈指数增长。这只是一个O(N)问题。N=2500时,代码在我的电脑上运行需要10多秒。如果有人能解释发生了什么,我将不胜感激。谢谢,马克。intN=250;Randomr=newRandom();varwork=Enumerable.Range(1,N).Select(x=>r.Next(0,6)).ToList();varchunks=newList>();//work.D

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

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