3

Resharper 建议我更改IDictionary<string, string>以下代码行:

private static void createCookie(HttpCookie cookie, IDictionary<string, string> values)

IEnumerable<KeyValuePair<string, string>>.

我不明白使用IEnumerable<KeyValuePair<string, string>>over的好处IDictionary

4

4 回答 4

6

Resharper 注意到您没有在代码中执行任何特定于字典的操作,因此建议您也允许接受更多通用对象。您在代码中所做的一切,您也可以使用IEnumerable<KeyValuePair<string, string>>.

于 2013-07-03T14:06:11.047 回答
1

在这种特定情况下没有太多优势。

但是,一般来说,最好尽可能使用最通用的参数类型,因为它会增加调用方法的方式数量。

因此,对于您的函数,您可以传递任何implements IEnumerable<KeyValuePair<string, string>>,其中包括IDictionary<string, string>可能还有许多其他类型。

Resharper 不知道它是否真的有用,所以它总是会警告你。

于 2013-07-03T14:06:00.497 回答
1

Resharper 建议尽可能使用基类/接口作为方法参数。

它与OOP的依赖倒置原理有关:https ://en.wikipedia.org/wiki/Dependency_inversion_principle 。

理论上可能有一些类实现了 IEnumerable<KeyValuePair<string, string>> 但没有实现 IDictionary<string, string>。如果您使用 IEnumerable<KeyValuePair<string, string>> 您的方法将更加通用,因为它将能够处理更大的对象集。

于 2013-07-03T14:17:02.810 回答
0

Resharper 可能会出错。您现在没有使用任何 IDictionary 的特定成员,但您最终可能会在将来添加它们。如果此方法应该始终适用于字典,那么您最好在公共接口中定义它。这样,如果您将来最终更改实现以使用特定于字典的方法,则不会造成任何问题。Resharper 只看到你现在写的东西,而不是你期望将来写的东西。

于 2013-07-03T14:11:45.070 回答