Resharper 说我不应该使用 List

发布于 2024-11-10 08:53:10 字数 399 浏览 2 评论 0原文

我有一个方法:

static void FileChangesDetected(List<ChangedFiles> files)

我使用了Visual Studio 2010和Resharper。 Resharper 总是建议我将 List 更改为 IEnumerable,我想知道这是为什么。

在该方法中,我只是这样做:

 foreach (var file in files)
 { ... }

使用 IEnumerable 而不是 List 有好处吗?

I have a method:

static void FileChangesDetected(List<ChangedFiles> files)

I used Visual Studio 2010 and Resharper. Resharper always recommends that I change the List<T> to IEnumerable<T>, and I'm wondering why this is.

In the method, I simply do this:

 foreach (var file in files)
 { ... }

Is there a benefit of using IEnumerable<T> rather than List<T>?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

扶醉桌前 2024-11-17 08:53:10

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

基本上,最好不要使用实现,而是对抽象进行编码。

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

这使您的函数更具可重用性并减少耦合

It all has to do with LSP (Liskov substitution principle).

Basically, instead of using implementations, it is better to code to abstractions.

In this specific case, if all you do is loop over the list, you can use IEnumerable<T> as the simplest abstraction - this way you don't have to use a List<T>, but any collection type in your function.

This allows your functions to be more reusable and reduces coupling.

一腔孤↑勇 2024-11-17 08:53:10

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

Resharper suggests that your method doesn't need really require List<T> as a parameter and can easily work with IEnumerable<T>. Which means that you can make you method more generic.

沉鱼一梦 2024-11-17 08:53:10

如果您只是迭代文件,那么它不必是List<>。您的代码也可以使用数组。或者更一般地说:它适用于您可以迭代的任何内容。这由 IEnumerable<> 表示。所以List<>的用法无需任何必要即可限制您消息的使用。 ReSharper 方法只是对此的一个提示。

If you are just iterating of your files, then it does not have to be a List<>. Your code would also work with an array. Or more general: It will work with anything you can iterate over. That's expressed by IEnumerable<>. So the usage of List<> restricts the usage of you message without any need. The ReSharper method is just a hint for that.

万人眼中万个我 2024-11-17 08:53:10

因为在您的代码中,您只使用了 filesIEnumerable 的事实,您不使用 Count 或 Add 等功能。

即使稍后您想要使用 List 特定方法(使用 Add 或 Count 方法),最好使用接口:IList 而不是具体实现。

Because in your code, you only use the fact that files is an IEnumerable<ChangedFiles>, you don't use for example Count, nor Add.

Even if later on, you want to use List specific methods (with Add or Count methods), it's always better to use an interface: IList<ChangedFiles> instead of a concrete implementation.

萤火眠眠 2024-11-17 08:53:10

您仍然可以使用 foreach

IEnumerable<ChangedFiles>

即使您将其更改为或,

ICollection<ChangedFiles>

You will still be able to the foreach even if you change it to

IEnumerable<ChangedFiles>

or

ICollection<ChangedFiles>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文