我是Resharper的新手并喜欢它。然而,它最近提出了一些对我没有意义的事情,我想知道为什么提出这个建议。我在Resharper中禁用了它,但我想知道是否有我想念的东西......
我写了一个带签名的函数:List<string> DoSomething()
Resharper建议我将其更改为:IEnumerable<string> DoSomething()
。
现在我可以理解为什么方法的参数必须尽可能通用。它有助于代码更具可重用性等。但是,我尝试确保我的方法返回的数据是特定的而不是通用的。
有人可以解释为什么Resharper建议它做了什么?
(要查找规则,请转到Resharper Options \ Code Inspection \ Inspection Severity,然后搜索:&#34;返回类型可以是IEnumerable&#34;。)
答案 0 :(得分:4)
您可能希望拥有更通用的返回类型有几个原因。
更通用的类型允许您更自由地更改方法的实现而无需更改方法接口。如果返回类型为IEnumerable<string>
,您可以选择使用string[]
代替List<string>
来生成返回值。
使用更通用的类型可为数据提供一些保护。如果该方法返回在类中作为私有成员存在的列表,则调用该方法的人可以更改返回的列表,而不会意识到它更改了类中的列表。当您返回只能用于迭代项目的IEnumerable<string>
时,它不会授予更改列表的权限。
更清楚的是如何使用更有限的返回类型。很自然地假设IEnumerable<string>
应该被迭代,但List<string>
可以以多种不同的方式使用。