Avatar billede Skynet Mester
24. april 2008 - 13:49 Der er 11 kommentarer og
1 løsning

blande strings og DateTime i en foreach

Hej

jeg har lavet en foreach, hvor jeg gerne vil have datoer tilbage som passer på navnet, eller en string som fortæller "at der ikke er nogle reservationer". Er det umiligt at blade forskellige typer, når jeg skriver public DateTime getnavn?

public DateTime getnavn(string navn)
          {
              foreach (Reservering en_reservering in reserveringsliste)

                  if (en_reservering.PropertyReserveringsnavn == navn)
                  {
                      return en_reservering.PropertyDato;
                  }
              return "vedkomende har ikke nogle reservationer;
          }
Avatar billede bitmatic Nybegynder
24. april 2008 - 14:12 #1
Nej. Ikke umiddelbart.

En funktion med signaturen "DateTime getnavn(string)" skal returnere en DateTime.
Avatar billede Skynet Mester
24. april 2008 - 14:29 #2
kan man skifte signaturen så det bare er public void getnavn(string navn)
Avatar billede bitmatic Nybegynder
24. april 2008 - 14:31 #3
Det kan du godt, men så returnerer du jo ikke noget.

Du kunne bibeholde signaturen, og så returnere null hvis der ikke er en reservation.
Avatar billede lasserasch Juniormester
24. april 2008 - 14:33 #4
Jeg forstår ikke hvorfor du vil retunere en dato. Du laver en foreach løkke, og løber alle reservationer igennem.

Men du vil kun retunere en datetime værdi.

Som jeg ser det er der 2 mulige senarier :

1. Du vil vide om han har mindst en reservation.
I så fald ville jeg retunere en bool værdi i stedet for.

2. Du vil vide præcis hvor mange reservationer han har samt hvilke dage har har reservationer.

I så fald er det jo ikke nok at retunere en datetime værdi. Så bliver du nødt til at oprette et eller andet form for dataset, hvor du så kommer alle de dato'er ind i hvor han har reservationer, og så retunerer det dataset i stedet for.

Hvis datasettet så indeholder 0 poster, så har han jo ingen reservationer.


Mvh.
Lasse
Avatar billede lasserasch Juniormester
24. april 2008 - 14:34 #5
bitmatic -> Et datetime objekt kan ikke være null.... ;-)
Avatar billede bitmatic Nybegynder
24. april 2008 - 14:40 #6
lasserasch -> hmmm... Så kunne han returnere "new DateTime(0)", men det er selvfølgelig ikke helt så elegant.

Din idé med at returnere et array eller lignende med reservationerne, der så er tomt hvis der ikke er nogen er nok noget federe :-)

altså "public List<DateTime> getnavn(string navn)" eller lignende....
Avatar billede Skynet Mester
24. april 2008 - 15:00 #7
lyder som god ide,

jeg har nu lavet
public List<DateTime> sublistNavne = new List<DateTime>();
         
            public string datoer_makeDatoSublist(string navn)
          {
              foreach (Reservering en_reservering in reserveringsliste)

                  if (en_reservering.PropertyReserveringsnavn == navn)
                   
                   
                  {
                      sublistNavne.Add(en_reservering.PropertyDato);
                     
                  }
           
                return "DATOERNE ER TILFØJET TIl NAVNET";
          }

og

public DateTime[] datoer_GetAllDatoSublist()
            {
                return sublistNavne.ToArray();

            }

det er bare mærkeligt at jeg får en fejl når jeg i min Windows form kalder sublisten

{
            Reservering r1 = new Reservering("silas", new DateTime(2008, 04, 22));
            Reservering r2 = new Reservering("kurt", new DateTime(2008, 04, 23));
            Reservering r3 = new Reservering("Peter", new DateTime(2008, 04, 24));
            Flaske f1 = new Flaske(r1, "ok", 43);
            f1.addReservartion(r2);
            f1.addReservartion(r3);

            f1.datoer_makeDatoSublist("kurt");
         
            listBox2.Items.AddRange(f1.datoer_GetAllDatoSublist());
           

        }

så får jeg:
Error    4    The best overloaded method match for 'System.Windows.Forms.ListBox.ObjectCollection.AddRange(System.Windows.Forms.ListBox.ObjectCollection)' has some invalid arguments   

og

Error    5    Argument '1': cannot convert from 'System.DateTime[]' to 'System.Windows.Forms.ListBox.ObjectCollection'
Avatar billede arne_v Ekspert
24. april 2008 - 15:05 #8
DateTime? fremfor DateTime maaske - saa kan der returneres null
Avatar billede Skynet Mester
24. april 2008 - 16:08 #9
har prøvet null men får fejl, har nu brugt Lasses ide om en tom liste
 
return sublistNavne.ToArray();

så det bliver
public List<DateTime> sublistNavne = new List<DateTime>();
         
            public DateTime[] datoer_makeDatoSublist(string navn)
          {
              foreach (Reservering en_reservering in reserveringsliste)

                  if (en_reservering.PropertyReserveringsnavn == navn)
                   
                   
                  {
                      sublistNavne.Add(en_reservering.PropertyDato);
                     
                  }

              return sublistNavne.ToArray();
          }

men får disse fejl:
Error    4    The best overloaded method match for 'System.Windows.Forms.ListBox.ObjectCollection.AddRange(System.Windows.Forms.ListBox.ObjectCollection)' has some invalid arguments   
Error    5    Argument '1': cannot convert from 'System.DateTime[]' to 'System.Windows.Forms.ListBox.ObjectCollection'   

når jeg kalender dem i min wondows form

private void button8_Click(object sender, EventArgs e)
        {
            Reservering r1 = new Reservering("silas", new DateTime(2008, 04, 22));
            Reservering r2 = new Reservering("kurt", new DateTime(2008, 04, 23));
            Reservering r3 = new Reservering("Peter", new DateTime(2008, 04, 24));
            Flaske f1 = new Flaske(r1, "ok", 43);
            f1.addReservartion(r2);
            f1.addReservartion(r3);

            f1.datoer_makeDatoSublist("kurt");
         
            listBox2.Items.AddRange(f1.datoer_GetAllDatoSublist ());
           

        }
Avatar billede Skynet Mester
25. april 2008 - 10:38 #10
har fundet frem til at fejlen nok skyldes at man ikke kan udskrive en liste af DateTime objekter som ToArray, kan man lave en override af DateTime ToString for på den måde at løse problemet?

public DateTime[] datoer_GetAllDatoSublist()
            {
                return sublistNavne.ToArray();

            }
Avatar billede Skynet Mester
26. april 2008 - 10:29 #11
har fået af vide at jeg skal bruge LINQ listBox2.Items.AddRange(f1.datoer_GetAllDatoSublist().Cast<object>().ToArray()); og det virker..

Men jeg synes at lasserasch svar løste denne tråds emne godt..

Tak for hjælpen..
Avatar billede lasserasch Juniormester
28. april 2008 - 08:43 #12
jamen så hermed svar da... :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester