IDictionary <string,string =“”>或NameValueCollection </string,>

时间:2008-09-27 21:26:44

标签: c#

我目前正在编写一个接口,允许应用程序将异常数据发送到中央存储库以获得支持。我对如何传递额外的上下文数据感到困惑:

public interface IExceptionNotifier
{
    void Notify(Exception ex, NameValueCollection context); //this      
    void Notify(Exception ex, IDictionary<string, string> context); //or this
}

在创建查找时,我经常发现自己处于类似的位置。忽略异常通知程序概念是否良好,最好使用IDictionary<string, string>NameValueCollection?你为什么选择一个呢?

2 个答案:

答案 0 :(得分:5)

(假设.NET 3.5在这里。在.NET 3.5之前,NameValueCollection的好处是能够将多个值绑定到一个键,而在“普通”集合中没有直接的等价物。)

您希望密钥具有潜在的多个值吗?如果是这样,我会考虑ILookup&lt; TKey,TValue&gt;。否则,我会选择IDictionary&lt; TKey,TValue&gt;。

除了其他任何东西,如果接收者想要进行LINQ对他们有用的任何处理,那么任何一个通用接口都会比NameValuePair更好。同样,如果调用者已经拥有泛型或动态上下文,则使用LINQ生成字典/查找可能更容易。

答案 1 :(得分:1)

如果上下文是丢弃值并且(此处是重要部分)将不会被序列化,例如为了将数据发送到另一个系统,我会使用IDictionary,因为它使您的界面更灵活。

另一方面,如果上下文一直保留或上下文将被序列化,请使用NameValueCollection,因为这样您就可以控制从调用者那里获得的内容。

编辑:mausch是正确的,您应该使用通用方法,但如果您想要序列化数据,我仍然不会使用接口。