当我有一个IEnumerable
我不知道它的列表与否(就其而言List
)时,我必须列举IEnumerable
以确保我不会枚举两次可枚举(例如循环两次,或类似的东西)那).
Resharper警告我可能多次枚举IEnumerable - 这很好,有时你会忘记它 - 并允许你选择quickfixes:
枚举到数组
枚举列表
当我选择Enumerate列表时,resharper引入了一个局部变量,并按以下方式分配IEnumerable(示例):
var enumeratedItems = items as IList?? items.ToList();
现在我的问题是:
为什么不简单items.ToList();
呢?
尝试施展到IList
第一位的优势是什么?
也许这IEnumerable
已经是一个列表,在这种情况下,调用ToList()
只会从现有的列表中创建一个新列表,所以在执行之前,resharper建议首先尝试将其强制转换以检查它是否是一个IList
并且仅在它不存在的情况下我们将执行ToList()
有一些成本的操作.