Какое отношение имеет char.MaxValue к поиску по строковому индексу? - PullRequest
0 голосов
/ 27 августа 2018

Я смотрел на нашу кодовую базу и нашел

public static IEnumerable<T> GetViewBetween<T>(this ImmutableSortedSet<T> set, T min, T max)
{
    var index = set.IndexOf(min);

    if (index < 0)
    {
            // No exact match found, but "larger" items are available.

        index = ~index;
    }

    while (index < set.Count)
    {
         var item = set[index++];

         if (set.KeyComparer.Compare(item, min) >= 0 && set.KeyComparer.Compare(item, max) <= 0)
         {
             yield return item;
         }
         else
         {
             break;
         }
    }
}

Который действительно ищет объекты между min и max. Однако меня интригует строковый регистр и вызов этого метода.

Предположим, у нас есть следующая структура набора (уже отсортированная) [ "esent", "event", "eventamazing", "ewent" ], и мы запрашиваем набор с термином "ev". Мне сказали, что это делает поиск по индексу, и в данном конкретном случае GetViewBetween возвращает [ "event", "eventamazing" ], что именно так, как я хочу, но вызов этого метода следующий:

set.GetViewBetween(term, term + char.MaxValue).ToImmutableList();

Я всегда думал, что строки сравниваются по длине или символам по символам в зависимости от компаратора (KeyComparer в моем случае - OrdinalIgnoreCaseComparer), но я не могу понять, как работает объединение char.MaxValue в этом случай

...