Avatar billede Skynet Mester
23. april 2008 - 15:56 Der er 24 kommentarer og
1 løsning

foreach med dato==dato

Hej,

jeg prøver at lave en metode i min klasse superresurser, som indeholder en liste af reserveringer:
public List<Reservering > reserveringsliste = new List<Reservering >();

public SuperResurser(Reservering Reservering, string Tilstand)


klassen Reserveringer indeholder en dato og navn:
  public Reservering(string reserveringsnavn, DateTime dato)


jeg er nu igang med at lave en metode i superresurser som kan søge efter en dato, og se om den er i listen af reservationer. dvs. en FindAll metode. jeg har forsøgt, men den virker ikke

public Reservering getDato(DateTime dato1)
          {
              foreach (Reservering  r1 in reserveringsliste)

              if (r1.PropertyDato == dato1)
              {
                  return Reservering.PropertyDato;
              }
              else
              {
                  return Reservering.PropertyReserveringsnavn;
              }
               
         
          }


jeg får følgende fejlkode:
Error    3    Cannot implicitly convert type 'System.DateTime'

Error    4    Cannot implicitly convert type 'string' to 'test.Reservering
Avatar billede nielle Nybegynder
23. april 2008 - 18:54 #1
Du har angivet at getDato() returnere en Reservering:

public Reservering getDato(DateTime dato1)


Men så kan du hverken returnere en DateTime:

return Reservering.PropertyDato;

- eller en string:

return Reservering.PropertyReserveringsnavn;


Ud fra navnet, getDato(), lyder det som om at den skulle returnere en DateTime i stedet fro en Reservering. Under alle omstændigheder skal alle dine return's returnere samme datatype.
Avatar billede Skynet Mester
24. april 2008 - 09:34 #2
ok, det er meningen at den skal søge datoerne igennem i reserveringsklassen, og hvis den kan finde en dato som matcher dato1, så skal den udskrive reserveringsnavnet.

jeg har prøvet igen, men får denne fejlkode:
  public string getDato(DateTime dato1)
          {
              foreach (Reservering  r1 in reserveringsliste)

              if (r1.PropertyDato == dato1)
              {
                  return Reservering.PropertyReserveringsnavn;
              }
         
          }

Error    3    'test.SuperResurser.getDato(System.DateTime)': not all code paths return a value
Avatar billede neshamar1975 Nybegynder
24. april 2008 - 10:26 #3
public string getDato(DateTime dato1)
          {
              foreach (Reservering  r1 in reserveringsliste)

              if (r1.PropertyDato == dato1)
              {
                  return Reservering.PropertyReserveringsnavn;
              }
              //hvis den ikke finder noget skal den returnere noget alligevel f.eks.
              return null;
          }
Avatar billede Skynet Mester
24. april 2008 - 10:47 #4
ok, jeg har nu sat en else på, og ændret den så den kun returnerer strings, men får stadigvæk samme fejlkode?

public string getDato(DateTime dato1)
          {
              foreach (Reservering r1 in reserveringsliste)

                  if (r1.PropertyDato == dato1)
                  {
                      return Reservering.PropertyReserveringsnavn;
                  }

                  else
                  {
                      return  "datoen er fri";
                  }
          }
Avatar billede nielle Nybegynder
24. april 2008 - 10:52 #5
Hvad siger den præcis, og hvilke linje(r) er det fejlen er i?
Avatar billede neshamar1975 Nybegynder
24. april 2008 - 10:53 #6
Skal se sådan ud:
public string getDato(DateTime dato1)
          {
              foreach (Reservering r1 in reserveringsliste)

                  if (r1.PropertyDato == dato1)
                  {
                      return Reservering.PropertyReserveringsnavn;
                  }
                  return  "datoen er fri";
          }
Avatar billede neshamar1975 Nybegynder
24. april 2008 - 10:54 #7
Skal se sådan ud:
Undskyld manglede klammer til foreach løkken

public string getDato(DateTime dato1)
          {
              foreach (Reservering r1 in reserveringsliste)
              {
                  if (r1.PropertyDato == dato1)
                  {
                      return Reservering.PropertyReserveringsnavn;
                  }
          }
                  return  "datoen er fri";
          }
Avatar billede nielle Nybegynder
24. april 2008 - 10:54 #8
public string getDato(DateTime dato1)
{
    foreach (Reservering r1 in reserveringsliste)
        if (r1.PropertyDato == dato1)
            return Reservering.PropertyReserveringsnavn;

    return  "datoen er fri";
}
Avatar billede Skynet Mester
24. april 2008 - 10:58 #9
jeg får ikke syntaksfejl, men når jeg kører programmet, får jeg denne fejl

Objektreferencen er ikke indstillet til en forekomst af et objekt.
return Reservering.PropertyReserveringsnavn;
Avatar billede neshamar1975 Nybegynder
24. april 2008 - 11:04 #10
er der noget data i "reserveringsliste"
Avatar billede nielle Nybegynder
24. april 2008 - 11:04 #11
Så er 'Reservering' vel ikke blevet sat til noget på det tidspunkt hvor getDato() kaldes.
Avatar billede nielle Nybegynder
24. april 2008 - 11:06 #12
Det er nu en god opskrift på forvirring når du skriver sådan noget som:

public SuperResurser(Reservering Reservering, string Tilstand)

For står "Reservering" så for selve klassen eller for et objekt af den klasse?
Avatar billede Skynet Mester
24. april 2008 - 11:10 #13
det er et objekt af reseveringsklassen som er

public Reservering(string reserveringsnavn, DateTime dato)

Dvs. når jeg laver en ny resurse (dette tilfælde en flaske som nedarver fra superresurser)

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);
Avatar billede nielle Nybegynder
24. april 2008 - 11:14 #14
Min pointe var nu at du skulle kalde dine objekter noget *andet* end det klassen hedder.

Når at du skriver sådan noget som:

public string getDato(DateTime dato1)
{
    foreach (Reservering r1 in reserveringsliste)
        if (r1.PropertyDato == dato1)
            return Reservering.PropertyReserveringsnavn;

    return  "datoen er fri";
}

- så er det imidlertid *klassen* den forsøger at få fat på - ikke et af dine objekter.

I klassen har du en PropertyReserveringsnavn (som er erklæret static), og det er den som er null. Derfor fejler koden på den måde.
Avatar billede Skynet Mester
24. april 2008 - 11:23 #15
ok, hvordan kan jeg så lave koden så den fanger objektet frem for klassen?

skal jeg lave den således at den kalder min funktion i superresurser
public Reservering getReservation(int index)
          {
              return reserveringsliste[index];
         
          }
Avatar billede neshamar1975 Nybegynder
24. april 2008 - 11:30 #16
du gennemgår public List<Reservering> reserveringsliste = new List<Reservering >();

men hvor putter du data ind i den liste?

I foregående tilføjer du bare til "Flaske"
Avatar billede nielle Nybegynder
24. april 2008 - 11:33 #17
Skal dette:

public string getDato(DateTime dato1)
{
    foreach (Reservering r1 in reserveringsliste)
        if (r1.PropertyDato == dato1)
            return Reservering.PropertyReserveringsnavn;

    return  "datoen er fri";
}

- ikke bare rettes til dette:

public string getDato(DateTime dato1)
{
    foreach (Reservering r1 in reserveringsliste)
        if (r1.PropertyDato == dato1)
            return r1.PropertyReserveringsnavn;

    return  "datoen er fri";
}

??
Avatar billede Skynet Mester
24. april 2008 - 11:34 #18
Når flasken laves tilføjes første reservering via:

public SuperResurser(Reservering Reservering, string Tilstand)
            {

            reserveringsliste.Add(Reservering);
            this.Tilstand = Tilstand;
         
        }

Efterfølgende tilføjes de via

public Reservering addReservartion(Reservering Reservering)
            {
                reserveringsliste.Add(Reservering);
                return Reservering;
            }
Avatar billede nielle Nybegynder
24. april 2008 - 11:42 #19
Ang.:

public Reservering addReservartion(Reservering Reservering)
{
    reserveringsliste.Add(Reservering);
    return Reservering;
}

Så bør du altså fortsat bruge forskellige navne for klassen og dens instanser (objekter).

Ret til noget i stil med:

public Reservering addReservartion(Reservering enReservering)
{
    reserveringsliste.Add(enReservering);
    return enReservering;
}

Derudover forstår jeg ikke helt hvorfor at du bruger enReservering som argument og så returnere den? Dete r jo et objekt du har i forvejen.
Avatar billede Skynet Mester
24. april 2008 - 12:15 #20
mange tak, der virker :)

public string getDato(DateTime dato1)
              {
                  foreach (Reservering en_reservering in reserveringsliste)

                      if (en_reservering.PropertyDato == dato1)
                      {
                          return en_reservering.PropertyReserveringsnavn;
                      }
                  return "datoen er fri";
              }

Mht.

public Reservering addReservartion(Reservering en_reservering)
            {
                reserveringsliste.Add(en_reservering);
                return en_reservering;
            }

så får jeg fejl hvis jeg sletter return Reservering;, jeg får afvide at der skal være:
Error    3    not all code paths return a value
Avatar billede Skynet Mester
24. april 2008 - 12:16 #21
som nu er return en_reservering :)
Avatar billede nielle Nybegynder
24. april 2008 - 12:25 #22
Det er klart. Du fortæller jo at den returenere en Reservering, og så skal den selvfølgeligt også gøre det.

Men det kan du jo bare lade være med. Ret den til:

public void addReservartion(Reservering en_reservering)
{
    reserveringsliste.Add(en_reservering);
}
Avatar billede Skynet Mester
24. april 2008 - 12:32 #23
ok, tak for hjælpen..
Avatar billede Skynet Mester
24. april 2008 - 16:50 #24
måske du hurtigt kan gennemskue mit nye spørgsmål http://www.eksperten.dk/spm/829078 hvor jeg har problemer med syntaksten når jeg laver en metode som finder alle de datoer som er tilknyttet et reserveringsnavn..
Avatar billede nielle Nybegynder
24. april 2008 - 17:43 #25
Det ser nu ud til at du allerede får god hjælp det :^)
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