【问题标题】:SortedList throwing exception when adding french characters添加法语字符时,SortedList 抛出异常
【发布时间】:2013-12-23 15:24:13
【问题描述】:

我正在将一些独特的法语单词添加到排序列表中,但它似乎无法区分某些单词,例如“bœuf”和 boeuf”。

private static void TestSortedList()
{

    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-fr");
    SortedList sortedList = new SortedList(new Comparer(CultureInfo.CurrentCulture));

    try
    {
        sortedList.Add("bœuf", "Value1");
        sortedList.Add("boeuf", "Value1");
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

所以上面的以下代码会抛出异常“System.ArgumentException: Item has been added。” 请帮忙!

【问题讨论】:

  • 但这不就是它应该做的吗?用法语排序时,这两个词被认为是相同的。
  • 嗨 George - 有没有办法让 .NET 在排序时认为它们不一样?我需要建立一个列表,这两个词必须出现在最终列表中。
  • 请参阅下面的答案,了解如何做到这一点,这个问题解释了原因。 stackoverflow.com/questions/492799/…

标签: c# special-characters sortedlist


【解决方案1】:
    SortedList sortedList = new SortedList(StringComparer.Ordinal);

    try
    {
        sortedList.Add("bœuf", "Value1");
        sortedList.Add("boeuf", "Value1");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }

有效。解释一下,OrdinalOrdinalIgnoreCase 比较器比较字符字节,它们对于不同的字符是不同的。 也见Difference between InvariantCulture and Ordinal string comparison

【讨论】:

  • 这当然可行,但很难知道这对于 OP 是否可以接受。如果不使用法语排序,SortedList 的排序会有所不同,例如,如果某些单词的第一个字符带有重音符号。
  • 没错,我编辑了我的帖子来解释Ordinal 比较器,这样他就可以考虑它是否合适。
  • 太棒了!非常感谢泽比。
猜你喜欢
  • 2015-07-19
  • 2014-06-25
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多