为什么resharper建议:&#34;返回类型可以是IEnumerable <t>&#34;?</t>

时间:2014-07-08 12:01:41

标签: .net generics collections resharper

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

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

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

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

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

(要查找规则,请转到Resharper Options \ Code Inspection \ Inspection Severity,然后搜索:&#34;返回类型可以是IEnumerable&#34;。)

1 个答案:

答案 0 :(得分:4)

您可能希望拥有更通用的返回类型有几个原因。

更通用的类型允许您更自由地更改方法的实现而无需更改方法接口。如果返回类型为IEnumerable<string>,您可以选择使用string[]代替List<string>来生成返回值。

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

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