以不变文化方式查找C#字典键

以不变文化方式查找C#字典键,c#,dictionary,string-comparison,invariantculture,C#,Dictionary,String Comparison,Invariantculture,我的应用程序处理一些文本解析,并使用专有名词缓存来减少数据库调用: Dictionary<String, ProperNoun> ProperNounsDict; if (!ProperNounsDict.ContainsKey(word)) { var newProper = new ProperNoun() { Word = word }; ProperNounsDict.Add(word, newProper); UnitOfWork.Proper

我的应用程序处理一些文本解析,并使用专有名词缓存来减少数据库调用:

Dictionary<String, ProperNoun> ProperNounsDict;

if (!ProperNounsDict.ContainsKey(word))
{
    var newProper = new ProperNoun() { Word = word  };
    ProperNounsDict.Add(word, newProper);

    UnitOfWork.ProperNounRepository.Insert(newProper);
    try
    {
        UnitOfWork.SaveChangesEx();
    }
    catch (Exception ex)
    {
         // 
    }
}
Saevarsson
Sævarsson
从数据库的角度来看是一样的,这对我来说很好,因为包含字符的单词在解析文本中非常罕见:

select * from dict.ProperNoun where Word = N'Saevarsson'  -- returns both Saevarsson and Sævarsson
2)C#

如果以不变的方式进行比较,则s1和s2被视为相等

问题:有没有一种方法可以以不变量区域性的方式检查字符串键的存在?如果可能的话,我不想失去检查键存在的O(1)复杂性

我尝试过的事情:

a)数据库检查-对于缓存未命中,在插入缓存之前,还要检查数据库。生成大量查询,因此性能非常糟糕

b)字符串规范化-使用类似的映射将不需要的字符替换为“正常”字符。需要大量的工作,我觉得它可以自动化,因为
StringComparison.InvariantCulture
知道如何处理这个问题


谢谢。

初始化词典时,可以将构造函数用于:

字典属性名称信息=
新词典(StringComparer.InvariantCulture);

在这种情况下,将使用不变区域性比较密钥。根据您的需要,您也可以使用其他构造函数。

初始化词典时,您可以使用以下构造函数:

字典属性名称信息=
新词典(StringComparer.InvariantCulture);

在这种情况下,将使用不变区域性比较密钥。您也可以根据需要使用其他构造函数。

使用此构造函数创建字典

Dictionary<String, ProperNoun> ProperNounsDict = new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);
Dictionary ProperNounsDict=新字典(StringComparer.InvariantCulture);

使用此构造函数创建字典

Dictionary<String, ProperNoun> ProperNounsDict = new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);
Dictionary ProperNounsDict=新字典(StringComparer.InvariantCulture);

您可以创建新字典并将
StringComparer.InvariantCulture
传递给构造函数。。。这将是O(1)您可以创建新字典并将
StringComparer.InvariantCulture
传递给构造函数。。。将是O(1)是。这正是我所需要的。在我的例子中,初始化是从数据库中完成的:
UnitOfWork.ProperNounRepository.AllNoTracking.ToDictionary(pn=>pn.Word,pn=>pn,StringComparer.InvariantCulture))。谢谢,是的。这正是我所需要的。在我的例子中,初始化是从数据库中完成的:
UnitOfWork.ProperNounRepository.AllNoTracking.ToDictionary(pn=>pn.Word,pn=>pn,StringComparer.InvariantCulture))。非常感谢。
Dictionary<String, ProperNoun> ProperNounsDict = 
    new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);
Dictionary<String, ProperNoun> ProperNounsDict = new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);