正在转换为IList,然后调用ToList()时null比普通ToList()更好?

时间:2017-01-13 12:26:33

标签: c# .net list resharper ienumerable

如果我有一个IEnumerable<SomeClass>,我不知道它是否列出了一个列表(就List<T>而言),我必须列举IEnumerable来确保我没有枚举两次可枚举(例如循环两次,或类似的东西)。

Resharper警告我可能多次枚举IEnumerable - 这很好,有时你会忘记它 - 并允许你选择quickfixes:

  • 枚举数组
  • 枚举列表

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

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

现在我的问题是:

为什么不只是items.ToList();

首先尝试转换为IList<SomeClass>有什么好处?

1 个答案:

答案 0 :(得分:8)

也许IEnumerable已经是一个列表,在这种情况下,调用ToList()只会从现有的列表中创建一个新的列表,所以在执行之前,resharper建议先尝试先将其转换为检查是否它是IList或不是,只有在它没有的情况下,我们才会执行有一些成本的ToList()操作。