0

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

问题:如果密钥不是唯一的,则更改密钥。当我尝试以下方法时,我得到“无法从'string'转换为'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);
        }               

        ...
    }
4

2 回答 2

2

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

于 2012-06-25T17:49:19.730 回答
0

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

  • 仅使用字符串作为键
  • 始终使用唯一的东西,例如 URL 或GUID *

它并不是真正独特的,但发生碰撞的概率接近于 0,尤其是在单台机器上。有关该主题的更多信息

于 2012-06-25T17:51:08.843 回答