2009-02-25 3 views
3

ich eine sortierte Liste von Daten bevölkert habe (gespeichert als Strings im Format TT/MM/JJJJ) aus einer XML-Datei mit XPath.Binary nicht zu haben erwartete Ergebnisse

Wenn ich jedoch die Liste abfrage, um zu sehen, ob ein Datum in der Liste existiert, bekomme ich immer ein negatives Ergebnis (d. H. Existiert nicht), obwohl ich hardcode die Abfragezeichenkette einem Datum in der Liste zuordnen kann.

Wenn jedoch auf dem Index ein String vergleichen zu tun, die die abgefragten Zeichenfolge enthält bekommen I 0 angibt, die Strings identisch sind.

Was kann dieses seltsame Verhalten verursachen?

Wie hier angefordert ist der Code

Urlaub bevölkert von:

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; 

Und die Suche ist:

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

Mit dem folgenden XML zurückgegeben wird:

<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> 
+0

Können Sie einen Beispielcode posten? – LukeH

+0

Was ist Ihre aktuelle Implementierung? – Richard

+0

überprüfen Sie Ihre Sortierreihenfolge? –

Antwort

10

Ich bel Das hat mit dem Format der Strings zu tun. Die Liste wird nach Tag, Monat und Jahr sortiert, was nicht korrekt ist.

Sie benötigen Strings zu formatieren, wie so:

yyyy/mm/dd

Und dann die Liste sortieren, und die Suche funktionieren sollte.

Wenn diese Daten waren (wie in DateTime), würde die Liste sich korrekt sortieren, aber da sie Zeichenfolgen sind, und Ihr Format keine Sortierung basierend auf den natürlichen Eigenschaften von Zeichenfolgen unterstützt, ist Ihre Sortierreihenfolge durcheinander .

+0

Ihr Recht, wenn ich das Format umkehre funktioniert es aber die Daten werden im TT/MM/JJJJ Format generiert Gibt es eine schnelle Möglichkeit dies in JJJJ/MM/TT zu konvertieren? – CodeMonkey

+0

@codeMonkey: Sehen Sie sich DateTime.ParseExact an und dort ist ein Format für das ISO-Format yyyy-mm-dd ... – Richard

+0

@Richard: thanks – CodeMonkey