当前位置: 首页 > 编程语言 > C#

linq.CastorconverttolistinConvertAll分享

时间:2023-04-10 15:57:40 C#

linq.CastorconverttolistinConvertAll考虑你必须将类型为List的mylist转换为List,其中T是Base子类,这些解决方案是否相同?哪个性能更好,为什么?我应该什么时候更喜欢使用第一个或第二个?返回mylist.Cast().ToList();返回mylist.ConvertAll(x=>(Base)x);也许第二种解决方案可能更好,因为mylist是直接转换的。在第一个解决方案中,列表先转换为IEnumerable,然后再转换为列表,但我不确定。TL;DR:ConvertAll进行1次内存分配,但.Cast.ToList在大多数情况下进行多次内存分配。大多数LINQ扩展(如.Cast())导致IEnumerable的延迟执行,它无法转换为ICollection(无法获得.Count结果)。当结果可以转换为ICollection时,.ToList和.ToArray可以只进行一次内存分配来复制元素,但如果不能:UPDATE令人惊讶的是,差异似乎没有我预期的那么重要:methodelapsedratiocountCast.ToList00:00:14.44873291.3719890831991123456789ConvertAll00:00:10.53123020.728868773261865Cast.ToList00:00:01.49597341.5023315822771312345678ConvertAll00:00:00.99576780.665632016125407Cast.ToList00:00:00.12529682.459487435998971234567ConvertAll00:00:00.05094420.40658878161491Cast.ToList00:00:00.00826113.99145006839945123456ConvertAll00:00:00.00206970.250535515380002Cast.ToList00:00:00.00080970.62055871982641712345ConvertAll00:00:00.00130491.61145104895105Cast.ToList00:00:00.00018120.1932075471698111234ConvertAll00:00:00.00093785.17578125Cast.ToList00:00:00.00014330.149501661129568123ConvertAll00:00:00.00095876.68888888888889所以,赛马吧!以上就是C#学习教程的全部内容:linq.Cast或者在ConvertAll中转换成列表。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——intc=123;varL=Enumerable.Range(0,c).ToL斯特();GC.收集();varsw1=秒表.StartNew();L.Cast().ToList();sw1.停止();GC.收集();varsw2=秒表.StartNew();L.ConvertAll(i=>(object)i);sw2.停止();MessageBox.Show($"Cast.ToListt{sw1.Elapsed}t{(double)sw1.ElapsedTicks/sw2.ElapsedTicks}n"+$"ConvertAllt{sw2.Elapsed}t{(double)sw2.ElapsedTicks/sw1.ElapsedTicks}");本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: