Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[c# .net] Date.Time in Arraylist

Empfohlene Antworten

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

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);

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.

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.

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 von Kosinator

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?

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ß

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.