Horstiii Geschrieben 24. Juni 2009 Geschrieben 24. Juni 2009 Moin moin, ich möchte gerne eine Array.List mit den letzten Zugriffszeiten mehrerer Dateien füllen. Dafür benutze ich folgenden Code: DateTime ldtLstAcs = DateTime.Now; for (int i2 = 0; i2 < SelectedItems.Count; i2++) { ldtLstAcs = File.GetLastAccessTime(MapPathSecure("/source/" + SelectedItems[i2])); ArrayList lastAccess = new ArrayList(); [COLOR="Red"]foreach[/COLOR] (ListItem itm2 in [COLOR="Red"]ldtLstAcs[/COLOR]) { lastAccess.Add(itm2.Value); } } Das Problem dabei ist nur, dass Foreach mit dem Date.Time der variablen nicht klar kommt..... Er gibt mir da folgenden Fehler: Eine foreach-Anweisung kann nicht für Variablen vom Typ "System.DateTime" verwendet werden, da "System.DateTime" keine öffentliche Definition für "GetEnumerator" enthält. Vill. kann mir ja einer helfen und sagen was ich anders machen muss! Danke gruß Horstiii Zitieren
VaNaTiC Geschrieben 24. Juni 2009 Geschrieben 24. Juni 2009 ArrayList ist aus System.Collections. Und bei den "alten" Collections brauch foreach Objekte, die einen Enumerator implementieren. Nimm doch stattdessen folgenden Code ab .NET 2.0 aus System.Collections.Generic: List<DateTime> liste = new List<DateTime>(); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); foreach ( DateTime dt in liste ) Console.WriteLine(dt); Zitieren
TDM Geschrieben 24. Juni 2009 Geschrieben 24. Juni 2009 ArrayList ist aus System.Collections. Und bei den "alten" Collections brauch foreach Objekte, die einen Enumerator implementieren. Falsch. Foreach braucht immer ein IEnumerable-Object. DateTime implementiert IEnumerable nur nicht. Nix mit alt oder neu. Zitieren
Horstiii Geschrieben 24. Juni 2009 Autor Geschrieben 24. Juni 2009 Aufjedenfall funktioniert die Lösung von VaNaTiC !! Dankeschön Und da hab ich direkt noch eine Frage..... und zwar wie kann ich das machen dass er mir alle heraussucht die älter als z.b. 2 Tage sind. Zitieren
Kosinator Geschrieben 24. Juni 2009 Geschrieben 24. Juni 2009 (bearbeitet) Nach List<DateTime> liste = new List<DateTime>(); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); foreach ( DateTime dt in liste ) Console.WriteLine(dt); kannst du es mit DateTime vorgestern= System.DateTime.Now.Date.AddDays(-2); foreach ( DateTime dt in liste ) { if (dt.Date <= vorgestern) // vllt. <, je nachdem was du willlst { Console.WriteLine(dt); } } versuchen. Aber auch ein blick in die Hilfe (VS 2008 cursor auf "DateTime" und mutig auf [F1] drücken) hätte sicher geholfen. Viel spaß. p.s.: wenn dir foreach nicht performant genug erscheint, kannst du auch Delegates benutzen p.p.s.: Ja, DateTime ist nicht IEnumerable, aber List<T> schon... edit p.p.s.: DateTime.Date ist vllt. angebrachter, wenn es dir ums Datum geht, soll auch die Zeit verglichen werden, nutze DateTime (z.B. Heute ist 18h Vorgesten um 17h soll mit angezeigt werden), aber auch hier hilft die Hilfe, oder ein Breakpoint (VS 2008 [F9]) fürs Verständnis. /edit Bearbeitet 24. Juni 2009 von Kosinator Zitieren
VaNaTiC Geschrieben 24. Juni 2009 Geschrieben 24. Juni 2009 Falsch. Foreach braucht immer ein IEnumerable-Object. DateTime implementiert IEnumerable nur nicht. Nix mit alt oder neu. Das ist nicht ganz richtig. List<T> implementiert IEnumerable<of T>. Zitieren
TDM Geschrieben 25. Juni 2009 Geschrieben 25. Juni 2009 Das ist nicht ganz richtig. List<T> implementiert IEnumerable<of T>. Ich hab nirgendswo das Gegenteil behauptet... Zitieren
VaNaTiC Geschrieben 25. Juni 2009 Geschrieben 25. Juni 2009 Ich hab nirgendswo das Gegenteil behauptet... Stimmt, nach eingehender Prüfung des Gesprächsverlaufs, habe ich meine Fehlinterpretation erkannt :upps Zitieren
Horstiii Geschrieben 26. Juni 2009 Autor Geschrieben 26. Juni 2009 Nach List<DateTime> liste = new List<DateTime>(); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); liste.Add(DateTime.Now); foreach ( DateTime dt in liste ) Console.WriteLine(dt); kannst du es mit DateTime vorgestern= System.DateTime.Now.Date.AddDays(-2); foreach ( DateTime dt in liste ) { if (dt.Date <= vorgestern) // vllt. <, je nachdem was du willlst { Console.WriteLine(dt); } } versuchen. Aber auch ein blick in die Hilfe (VS 2008 cursor auf "DateTime" und mutig auf [F1] drücken) hätte sicher geholfen. Viel spaß. p.s.: wenn dir foreach nicht performant genug erscheint, kannst du auch Delegates benutzen p.p.s.: Ja, DateTime ist nicht IEnumerable, aber List<T> schon... edit p.p.s.: DateTime.Date ist vllt. angebrachter, wenn es dir ums Datum geht, soll auch die Zeit verglichen werden, nutze DateTime (z.B. Heute ist 18h Vorgesten um 17h soll mit angezeigt werden), aber auch hier hilft die Hilfe, oder ein Breakpoint (VS 2008 [F9]) fürs Verständnis. /edit danke. aber ich habe halt eine CheckBoxList wo dateien aufgeführt werden..... nun habe ich unten noch eine checkbox hingemacht, wenn diese angehakt ist, sollen oben alle dateien deren letzter zugriff älter als 2 tage ist angehackt werden..... wie mach ich das am besten? Zitieren
Kosinator Geschrieben 26. Juni 2009 Geschrieben 26. Juni 2009 danke. aber ich habe halt eine CheckBoxList wo dateien aufgeführt werden..... nun habe ich unten noch eine checkbox hingemacht, wenn diese angehakt ist, sollen oben alle dateien deren letzter zugriff älter als 2 tage ist angehackt werden..... Wie meinst du das genau? for (int i = 0; i < checkedListBox1.Items.Count; i++) { ((CheckBox)checkedListBox1.Items[i]).Checked = (anDateiGebundenesItem).DateTime.Date <= System.DateTime.Now.Date.AddDays(-2); } so etwas, oder mehr eine "normale Liste" mit Checkboxen davor (nicht empfehlenswert), oder Checkboxen mit Dateinamen im Text-Value ? --- mehr Infos, dann helfe ich gerne (vllt Codeschnipsel?) --- gruß Zitieren
TDM Geschrieben 26. Juni 2009 Geschrieben 26. Juni 2009 Wie meinst du das genau? --- mehr Infos, dann helfe ich gerne (vllt Codeschnipsel?) --- Ich denke mal, dass es mit dem zusammenhängt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.