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>有好处吗?

Resharper说我不应该;t使用列表<;T>;

这一切都与LSP(Liskov替换原理)有关。

基本上,与其使用实现,不如编写抽象代码。

在这种特定情况下,如果您所做的只是在列表上循环,则可以使用IEnumerable<T>作为最简单的抽象-这样,您就不需要使用List<T>,而是函数中的任何集合类型。

这允许您的功能更加可重用,并减少耦合。

Resharper建议您的方法不需要真正需要List<T>作为参数,并且可以轻松地使用IEnumerable<T>。这意味着您可以使方法更加通用。

如果您只是在迭代files,那么它不必是List<>。您的代码也可以使用数组。或者更一般地说:它将适用于任何你可以迭代的东西。这是用IEnumerable<>表示的。因此List<>的用法在没有任何需要的情况下限制您的消息的使用。ReSharper方法只是一个提示。

因为在您的代码中,您只使用filesIEnumerable<ChangedFiles>这一事实,所以您不使用例如Count和Add。

即使以后想要使用List特定的方法(使用Add或Count方法),最好使用接口IList<ChangedFiles>,而不是具体的实现。

即使将foreach更改为,您仍然可以访问它

IEnumerable<ChangedFiles>

ICollection<ChangedFiles>