Resharper建议我更改下面代码行中的IDictionary<string, string>
:
private static void createCookie(HttpCookie cookie, IDictionary<string, string> values)
转换为 IEnumerable<KeyValuePair<string, string>>
的优点我不太明白,相比之下使用 IDictionary
有什么好处呢?
Resharper注意到您的代码中没有涉及任何字典特定操作,因此建议也接受更通用的对象。您的代码中所做的一切都可以使用 IEnumerable<KeyValuePair<string, string>>
实现。
Resharper建议尽可能在方法参数中使用基类/接口。
这与面向对象编程的依赖倒置原则有关: https://en.wikipedia.org/wiki/Dependency_inversion_principle。
从理论上讲,可能存在一些实现IEnumerable<KeyValuePair<string, string>>但不实现IDictionary<string, string>的类。 如果您使用IEnumerable<KeyValuePair<string, string>>,那么您的方法将更加通用,因为它将能够处理更大的对象集。
Resharper可能是错误的。您现在没有使用IDictionary的任何特定成员,但将来可能会添加它们。如果此方法应始终在字典上工作,则最好在公共接口中定义该方法。这样,如果您将来更改实现以使用字典特定方法,则不会引起任何问题。 Resharper只看到您现在编写的内容,而不是您期望将来编写的内容。
createCookie
方法中,IEnumerable<KeyValuePair<string, string>>
比IDictionary<string, string>
更宽松,因为你没有使用任何IDictionary<,>
特有的方法。这只是一个建议。 - Simon Belanger