Я использую .NET 4.6, и я испытал серьезную странность. Я пытаюсь получить IEnumerable из всех значений из отсортированного набора, которые НЕ являются нечувствительными к регистру эквивалентами переданных в IEnumerable. Из того, что я понимаю, это работа Except.SortedSet <string> Linq. Исключительно с странностью стран сравнения
У меня есть класс, CaseInsensitiveComparer который реализуется следующим образом:
public class CaseInsensitiveComparer : IComparer<string>, IEqualityComparer<string>
{
public static CaseInsensitiveComparer Instance { get; private set; }
static CaseInsensitiveComparer()
{
Instance = new CaseInsensitiveComparer();
}
public int Compare(string a, string b)
{
var ret = string.Compare(a, b, true);
return ret;
}
public bool Equals(string a, string b)
{
return Compare(a, b) == 0;
}
public int GetHashCode(string a)
{
return a.GetHashCode();
}
}
Я использую это так:
public void DotNetWeirdness()
{
var a = new SortedSet<string>();
a.Add("A");
var b = a.Except(new string[] { "a" }, CaseInsensitiveComparer.Instance);
}
Значение Ь есть IEnumerable, содержащий А. Так как я запрашивая все значения в SortedSet, за исключением a/A, не должен ли я иметь пустой набор в качестве результата? Я очень смущен этим.
Спасибо!
Вы не писать 'GetHashCode' возвращать то же значение для' 'Ā' и Ā'. – Blorgbeard