IDictionary和IEnumerable之间的差异<;KeyValuePair>;
本文关键字:lt KeyValuePair gt IEnumerable 之间 IDictionary | 更新日期: 2023-09-27 18:21:04
Resharper建议我在以下代码行中更改IDictionary<string, string>
:
private static void createCookie(HttpCookie cookie, IDictionary<string, string> values)
至CCD_ 2。
我不明白使用IEnumerable<KeyValuePair<string, string>>
比使用IDictionary
有什么好处。
Resharper注意到,您在代码中没有做任何特定于字典的事情,因此建议也允许接受更通用的对象。您在代码中所做的一切,也可以使用IEnumerable<KeyValuePair<string, string>>
来完成。
在这种特定情况下没有太大优势。
但是,通常情况下,最好尽可能使用最通用的参数类型,因为这会增加调用该方法的方法的数量。
因此,对于您的函数,您可以传递任何实现IEnumerable<KeyValuePair<string, string>>
的,其中包括IDictionary<string, string>
以及可能的许多其他类型。
Resharper不知道它是否真的那么有用,所以它总是警告你。
Resharper建议尽可能使用基类/接口作为方法参数。
它与OOP的依赖反转原理有关:https://en.wikipedia.org/wiki/Dependency_inversion_principle.
从理论上讲,可能存在一些实现IEnumerable<KeyValuePair<字符串,字符串>gt;但不实现IDictionary<字符串,字符串>。如果您使用IEnumerable<KeyValuePair<字符串,字符串>gt;您的方法将更加通用,因为它将能够处理更大的对象集。
Resharper可能是错误的。您现在没有使用IDictionary的任何特定成员,但您可能最终会在将来添加它们。如果这个方法应该始终适用于字典,那么您最好在公共接口中定义它。这样,如果将来更改实现以使用字典特定的方法,就不会造成任何问题。Resharper只看到你现在写的东西,而不是你期望未来写的东西。