确保Exception.Data IDictionary中的唯一键

时间:2012-06-25 17:46:32

标签: c# exception anonymous-types idictionary

我编写了一个扩展方法来帮助在错误报告期间收集崩溃数据。此方法旨在确保密钥始终是唯一的。如果您有一些try / catch块,有时数据可能会重复。我在这里相当容易,而不是超级最佳实践。

问题:如果密钥不唯一,请更改密钥。当我尝试下面的方法时,我得到“无法从'字符串'转换为'TKey'”。有什么想法吗?

    public static void AddUnique<TKey, TValue>(this System.Collections.IDictionary dictionary, TKey key, TValue value)
    {
        if(dictionary[key] != null)
        {
            var newKey = key.ToString() + "-";
            AddUnique<TKey, TValue>(dictionary, newKey, value);
        }               

        ...
    }

2 个答案:

答案 0 :(得分:2)

如果您知道您的密钥始终是字符串,请从方法签名中删除TKey泛型参数,并在其位置使用string。或者,您可能希望保留两个通用参数,但将递归调用更改为AddUnique<string, TValue>()

答案 1 :(得分:0)

您无法将字符串连接到每个可能的键。你必须解决这个问题:

  • 仅使用字符串作为键
  • 使用一些独特的东西,例如:网址或GUID *

它并不是唯一的,但碰撞的概率接近0,特别是在一台机器上。 More info on the subject