定义 C# 类类型实例(例如字典)后更改其属性
本文关键字:属性 字典 类型 实例 定义 | 更新日期: 2023-09-27 18:31:24
我可以设置一个字典,以便在实例化期间进行比较时忽略大小写:
Dictionary<string, long> SomeDict=new Dictionary<string, long>(StringComparer.InvariantCultureIgnoreCase);
如何在字典实例化后设置 StringComparer.InvariantCultureIgnoreCase?
你不能。
你能做的最好的事情就是创建一个带有新比较器的新字典,并复制所有值。
出于以下几个原因,这是必要的:
- 使用新的比较器,某些键可能被视为相等,需要合并 需要为每个现有键计算新哈希值,
- 以便将来使用新比较器创建的哈希能够找到旧键。
通过重新创建它...
SomeDict = new Dictionary<string, long>(SomeDict,
StringComparer.InvariantCultureIgnoreCase);
最后,你想要的改变太激进了(项目的所有哈希值可能会改变。只有"可能",因为如果键都是 "123"
的形式,"456"
哈希将保持不变,但这里我们谈论的是一般情况)。字典必须清理并重新填充,因此几乎从头开始重新创建。
我必须同意您必须重新创建字典的其他解决方案,但如果让它看起来好像是可修改的更容易,您可以创建一个隐藏字典重新创建的类:
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
}