Resharper说我不应该;t使用列表<;T>;
本文关键字:列表 lt gt 不应该 Resharper | 更新日期: 2023-09-27 17:57:48
我有一个方法:
static void FileChangesDetected(List<ChangedFiles> files)
我使用了Visual Studio 2010和Resharper。Resharper总是建议我将List<T>
更改为IEnumerable<T>
,我想知道为什么会这样
在方法中,我简单地这样做:
foreach (var file in files)
{ ... }
使用IEnumerable<T>
而不是List<T>
有好处吗?
这一切都与LSP(Liskov替换原理)有关。
基本上,与其使用实现,不如编写抽象代码。
在这种特定情况下,如果您所做的只是在列表上循环,则可以使用IEnumerable<T>
作为最简单的抽象-这样,您就不需要使用List<T>
,而是函数中的任何集合类型。
这允许您的功能更加可重用,并减少耦合。
Resharper建议您的方法不需要真正需要List<T>
作为参数,并且可以轻松地使用IEnumerable<T>
。这意味着您可以使方法更加通用。
如果您只是在迭代files
,那么它不必是List<>。您的代码也可以使用数组。或者更一般地说:它将适用于任何你可以迭代的东西。这是用IEnumerable<>表示的。因此List<>的用法在没有任何需要的情况下限制您的消息的使用。ReSharper方法只是一个提示。
因为在您的代码中,您只使用files
是IEnumerable<ChangedFiles>
这一事实,所以您不使用例如Count和Add。
即使以后想要使用List特定的方法(使用Add或Count方法),最好使用接口IList<ChangedFiles>
,而不是具体的实现。
即使将foreach更改为,您仍然可以访问它
IEnumerable<ChangedFiles>
或
ICollection<ChangedFiles>