在实例化期间,我可以将字典设置为在比较时忽略大小写:
Dictionary<string, long> SomeDict=new Dictionary<string, long>(StringComparer.InvariantCultureIgnoreCase);
如何在字典实例化后设置StringComparer.InvariantCultureIgnoreCase?
答案 0 :(得分:3)
通过重新创建它......
SomeDict = new Dictionary<string, long>(SomeDict,
StringComparer.InvariantCultureIgnoreCase);
最后,您想要的更改过于激进(项目的所有哈希值都可能会发生变化。只有“可能”因为如果密钥全部采用"123"
形式,"456"
哈希将保持不变,但在这里我们说的是一般情况)。字典必须清理和重新填充,因此几乎从头开始重新创建。
答案 1 :(得分:3)
你做不到。
您可以做的最好的事情是使用新的比较器创建一个新字典并复制所有值。
由于以下几个原因,这是必要的:
答案 2 :(得分:1)
我必须同意你必须重新创建字典的其他解决方案,但如果它更容易使它看起来好像可以修改,你可以创建一个隐藏字典的类娱乐:
public class MyDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> _dict;
public IEqualityComparer<TKey> Comparer
{
get
{
return _dict.Comparer;
}
set
{
_dict = new Dictionary<TKey, TValue>(_dict, value);
}
}
// constructors and IDictionary implementations, mirroring _dict
}