2008-09-27 82 views
6

我目前正在编写一个接口,允许应用程序将异常数据发送到中央存储库用于支持目的。我在一个关于如何通过额外的上下文数据窘境:IDictionary <string,string>或NameValueCollection

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

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

回答

1

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

另一方面,如果上下文始终保持不变或者上下文将被序列化,则使用NameValueCollection,因为这样您就可以控制从调用者实际获得的内容。

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

+0

您能否扩展“在您从调用者实际获得的内容的控制下”?呼叫者发送重复密钥的可能性是否存在问题?我想我不太明白为什么如果涉及序列化,你会避免使用字典。 – 2017-03-16 14:17:20

5

(假设.NET 3.5在这里。预.NET 3.5,的NameValueCollection将有能够配合多个值的关键,在“正常”的藏品没有等同的利益。)

你想键有潜在的多个值?如果是这样,我会考虑ILookup < TKey,TValue>。否则,我会去IDictionary < TKey,TValue>。

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

相关问题