.net SortedList与StringComparer和德语变音符号

时间:2013-11-05 12:19:41

标签: .net sortedlist currentculture

我有一个带街道名称的SortedList

Dim orderedListStreet As New Generic.SortedList(Of String, String)(StringComparer.CurrentCulture)

以Lets为例,该列表已包含“Hauptstrasse

如果我添加“Hauptstraße”,则会抛出异常 - > Key does already exist

有没有人知道如何添加“Hauptstrasse”和“Hauptstraße”?

1 个答案:

答案 0 :(得分:5)

您可以使用认为它们不同的比较器。在德国,我希望Hauptstrasse和Hauptstraße成为同一条街,所以德国文化认为它们是平等的是合乎逻辑的。

使用哪一个取决于您的需求 - 最快的将是StringComparer.OrdinalStringComparer.OrdinalIgnoreCase

如果您想要对文化敏感的排序,但想要将您的文化认为相同的两个字符串视为不同的,那么一种解决方案就是实现您自己的比较器,例如:

int MyComparer(string x, string y)
{
    var result = StringComparer.CurrentCulture.Compare(x,y);
    if (result == 0) result = StringComparer.Ordinal.Compare(x,y);
    return result;
}

这是基于CurrentCulture的排序,但是使用序数排序来断开关系(如果它不符合您的需要,您可以用其他东西替换它)。