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有什么好处。

IDictionary和IEnumerable之间的差异<;KeyValuePair>;

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只看到你现在写的东西,而不是你期望未来写的东西。