2017-01-13 14 views
7

当我有一个IEnumerable<SomeClass>从中我不知道它是否列表(根据List<T>),我必须枚举IEnumerable以确保我没有枚举该枚举两次(如循环它两次,或类似的东西)。正在转换为IList,然后调用ToList()时比空ToList()更好吗?

ReSharper的警告我,IEnumerable的可能的多个枚举 - 这是很好的,有时候你忘记它 - 让你选择快速修复:

  • 枚举数组
  • 枚举列出

当我选择Enumerate列表时,resharper引入了一个局部变量,并按如下方式分配IEnumerable(示例):

var enumeratedItems = items as IList<SomeClass> ?? items.ToList(); 

现在我的问题是:

为什么不简单地做items.ToList();

首先尝试投射到IList<SomeClass>的优点是什么?

回答

7

也许IEnumerable已经是一个列表,在这种情况下调用ToList()将刚从是已经存在的创建一个新的列表,这样做的ReSharper之前,建议尝试投它首先要检查它是否是一个IList或不和只有在没有的情况下,我们才会执行有一定成本的ToList()操作。

+0

哦,我明白了,很有道理!谢谢 :) – Mafii