2017-04-30 1 views
0

Ich habe derzeit einige Code, die Zeichenfolgen in alphabetischer Reihenfolge sortieren können. Ich würde gerne die Monate nach dem Kalenderjahr sortieren. Ich habe Wege gesehen, dies auf dieser Website zu tun, kann sie aber nicht speziell auf meinen Code anwenden. Was müsste ich hinzufügen, damit es in der Reihenfolge sortiert wird (Januar, Februar usw.). Jede Hilfe wird sehr geschätzt.Sortieren von Monaten nach Kalenderjahr

-Code Monate Array zu lesen:

var month1Values = File 
    .ReadAllLines(monthFilePath) 
    .Select(x => new { Name = monthFilePath, Sort = DateTime.ParseExact(x, "MMMM", CultureInfo.InvariantCulture) }) 
    .ToArray(); 

-Code zu sortieren:

if (SortFile == 3) 
{     
    comparison1 = string.Compare(fileData[index].MonthValues, 
     fileData[index + 1].MonthValues) > 0; 

    if (comparison1) 
    { 
     temp = fileData[index].MonthValues; 
     fileData[index].MonthValues = fileData[index + 1].MonthValues; 
     fileData[index + 1].MonthValues = temp; 
     swap = true; 
    } 
} 

Fehler angezeigt, in dem asterix ist:

for (var index = 0; index < datasize; index++) 
      { 
       fileData[index] = new FileData 
       { 
      DayValues = day1Values[index], 
      MonthValues = *month1Values[index]*, 

       }; 
      } 

Fehler liest Typ 'nicht konvertieren kann < annonymous Typ: Zeichenfolge Name, System.DateTime Sort> 'to' string '. Wie behebe ich dieses Problem?

+0

'Ich habe Wege gesehen, dies auf dieser Website zu tun' - Können Sie uns eine [mcve] zeigen, die eine dieser Methoden verwendet, aber nicht funktioniert? –

+0

http://StackOverflow.com/Questions/8539088/Sorting-Months-in-Alist, aber das ist in einer Liste – Duncher

+0

Warum denkst du würde es anders mit einem Array funktionieren? Wenn Sie müssen, versuchen Sie '.ToList()' auf das Ergebnis von 'ReadAllLines' zu setzen und Sie haben eine Liste mit der Sie arbeiten können. –

Antwort

0

Sie erstellen anonyme Datentypen in Ihrer Select-Anweisung (erste Code-Box, Zeile 3) statt auf DateTime-Typ. Die Laufzeitumgebung kann Ihren anonymen Typ nicht in String umwandeln.

Dies sollte wie erwartet funktionieren:

.Select(x => DateTime.ParseExact(x, "MMMM", CultureInfo.InvariantCulture))

Seien Sie sich bewusst, dass normale DateTime ->String Besetzung beinhaltet gegeben einen vollen Tag von nur Monat zu schaffen; Dies beinhaltet die Annahme, dass Tag und Jahr aktuell sind und Stunde, Minute und Sekunde auf Null gesetzt sind.