为什么 resharper 建议:“返回类型可以是 IEnumerable<T>”?

Oma*_*aer 5 .net generics collections resharper

我是 Resharper 的新手并且喜欢它。然而,它最近提出了一些对我来说没有意义的东西,我想知道它为什么提出这个建议。我已经在 Resharper 中禁用了它,但我想知道我是否遗漏了什么......

我写了一个带有签名的函数: List<string> DoSomething()

Resharper 建议我将其更改为:IEnumerable<string> DoSomething().

现在我可以理解为什么方法的参数必须尽可能通用了。它有助于代码更可重用等。但是,我尝试确保我的方法返回的数据是特定的而不是通用的。

有人可以解释为什么 Resharper 建议它做什么吗?

(要查找规则,请转到 Resharper Options \ Code Inspection \ Inspection Severity,然后搜索:“Return type can be IEnumerable”。)

Guf*_*ffa 5

您可能需要更通用的返回类型的原因有很多。

更通用的类型允许您在不更改方法接口的情况下更自由地更改方法的实现。例如,对于返回类型,IEnumerable<string>您可以选择使用 astring[]而不是 aList<string>来生成返回值。

使用更通用的类型可为数据提供一些保护。如果该方法返回一个作为类中私有成员存在的列表,则调用该方法的人可能会更改返回的列表,而不会意识到它更改了类中的列表。当您返回IEnumerable<string>只能用于迭代项目的 时,它不会授予更改列表的访问权限。

更清楚的是应该如何使用更有限的返回类型。很自然地假设 anIEnumerable<string>应该被迭代,但是 aList<string>可以以多种不同的方式使用。