Вопрос

Я заполнил отсортированный список дат (хранящийся в виде строк в формате дд/мм/гггг) из 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>
Это было полезно?

Решение

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

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

гггг/мм/дд

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top