BinarySearch не имеет ожидаемых результатов - PullRequest
3 голосов
/ 25 февраля 2009

Я заполнил отсортированный список дат (сохраненный в виде строк в формате дд / мм / гггг) из файла XML с использованием xpath.

Однако при запросе списка, чтобы увидеть, существует ли дата в списке, я всегда получаю отрицательный результат (т.е. не существует), даже если у меня есть жесткий код строки запроса, чтобы соответствовать дате в списке.

Однако при сравнении строк в индексе, содержащем запрашиваемую строку, я получаю 0, что означает, что строки идентичны.

Что может вызвать это странное поведение?

В соответствии с указанным здесь кодом

Праздники заселены:

while (iter.MoveNext())
{
    XPathNavigator nav2 = iter.Current;
    XPathNodeIterator iter2 = nav2.SelectDescendants("date", "", false);
    while (iter2.MoveNext())
    {
        date = iter2.Current.ToString();
        holidays.Add(date);
    }
}

return holidays;

И поиск:

holidays = list.getHolidays();
if(holidays.BinarySearch(DateTime.Now.ToShortDateString()) > 0)

Со следующим возвращаемым XML:

<date>01/01/2009</date>
<date>25/02/2009</date>
<date>10/04/2009</date>
<date>13/04/2009</date>
<date>04/05/2009</date>
<date>25/05/2009</date>
<date>31/08/2009</date>
<date>25/12/2009</date>
<date>28/12/2009</date>

1 Ответ

10 голосов
/ 25 февраля 2009

Я считаю, что это связано с форматом строк. Ваш список сортируется по дням, месяцам и годам, что не правильно.

Вам нужно отформатировать строки следующим образом:

гггг / мм / дд

А затем сортируйте список, и ваш поиск должен работать.

Если бы это были даты (как в DateTime), тогда список сортировался бы правильно, но поскольку они являются строками, а ваш формат не поддерживает сортировку на основе естественных свойств строк ваш порядок сортировки испорчен.

...