Resharper建议我在以下代码行中更改IDictionary<string, string>
:
private static void createCookie(HttpCookie cookie, IDictionary<string, string> values)
到IEnumerable<KeyValuePair<string, string>>
。
我不理解使用IEnumerable<KeyValuePair<string, string>>
优于IDictionary
的优势。
答案 0 :(得分:6)
Resharper注意到你没有在你的代码中做任何字典特定的事情,所以它建议允许更多的通用对象被接受。您在代码中所做的一切,也可以使用IEnumerable<KeyValuePair<string, string>>
。
答案 1 :(得分:1)
在这种特殊情况下没有太大的优势。
但是,一般情况下,最好使用最常用的参数类型,因为它增加了调用方法的方式。
因此,对于您的函数,您可以传递实现IEnumerable<KeyValuePair<string, string>>
的任何,其中包括IDictionary<string, string>
以及其他许多类型。
Resharper不知道它是否真的有用,所以它总是警告你。
答案 2 :(得分:1)
Resharper建议尽可能使用基类/接口作为方法参数。
它与OOP的依赖性倒置原则有关:https://en.wikipedia.org/wiki/Dependency_inversion_principle。
理论上可能有一些类实现IEnumerable&lt; KeyValuePair&lt; string,string&gt;&gt;但是不要实现IDictionary&lt; string,string&gt;。 如果您使用IEnumerable&lt; KeyValuePair&lt; string,string&gt;&gt;您的方法将更加通用,因为它将能够处理更大的对象集。
答案 3 :(得分:0)
Resharper可能错了。您现在没有使用任何IDictionary的特定成员,但您最终可能会在将来添加它们。如果此方法应始终适用于字典,那么最好在公共接口中定义它。这样,如果您最终在将来更改实现以使用字典特定方法,则不会导致任何问题。 Resharper只看到你现在写的东西,而不是你未来想要写的东西。