Avatar billede Skynet Mester
20. april 2008 - 15:49 Der er 14 kommentarer og
1 løsning

hjælp til foreach

Hey, nogen som kan hjælpe med min foreach så den virker?, jeg har prøvet at lave den således at den finder dato og om den er "ok", men der er p.t. fejl i min kode


Flaske f1 = new Flaske("ow", new DateTime(2008, 05, 21), "ok", 43),
                  f2 = new Flaske("ow2",new DateTime(2008, 05, 20), "ok", 45);

            List<Flaske> Flaskeliste = new List<Flaske>();
            Flaskeliste.Add(f1);
            Flaskeliste.Add(f2);


          DateTime dateToFind = (new DateTime (2008, 05, 21));

            foreach (Flaske dato in Flaskeliste)
          {
              if (dato > dateToFind && "ok")
              {
                  checkedListBox1.Items.Add(dato.ToString());
              }
          }
Avatar billede w13 Novice
20. april 2008 - 15:56 #1
Skal det ikke være:

if (dato > dateToFind && date == "ok")
Avatar billede w13 Novice
20. april 2008 - 15:57 #2
Og hvilken fejl er der?
Avatar billede Syska Mester
20. april 2008 - 16:15 #3
foreach(Flaske dato in Flaskelist)

Den må give nogen problemer med mindre din Flaske er en Datetime ...

Hvordan ser din flaske klasse ud ?

Indtil videre ville jeg gætte mig til:
            foreach (Flaske f in Flaskeliste)
          {
              if (f.Dato > dateToFind && f.Status == "ok")
              {
                  checkedListBox1.Items.Add(dato.ToString());
              }
          }

&& "ok" ... hvad skal den teste ... noget som står i Flaske klassen ?

Det er 100% gætteri da du ikke har meget  med om din flaske klasse ..

// ouT
Avatar billede Syska Mester
20. april 2008 - 16:16 #4
dateToFind er en Datetime, men "ok" er en string ... så de to kan ikke sammenlignes "w13" ....

men der er noget helt galt i hans klasse ... eller det han prøver på :-) Men det skal vi nok få løst ...

// ouT
Avatar billede w13 Novice
20. april 2008 - 16:19 #5
Nej, jeg tror lige, jeg sad og sov. =)
Avatar billede Skynet Mester
20. april 2008 - 17:00 #6
ok, tak. Flaske er ikke en DateTime, her er den:

  class Flaske : SuperResurser
    {

 
    protected int FlaskeID;
   


    public Flaske(string Reservering, DateTime dato, string Tilstand, int FlaskeID) :
                    base(Reservering, dato, Tilstand)
            {
                this.FlaskeID = FlaskeID;
   
            }

       
            public int PropertyFlaskeID
            {
                get { return FlaskeID; }
                set { FlaskeID = value; }
            }
       
Den nedarver fra denne klasse:

public class SuperResurser
    {

        protected DateTime dato;
        protected string Reservering;
        protected string Tilstand;

        public List<string> reserveringsliste = new List<string>();

        public SuperResurser(string Reservering, DateTime dato, string Tilstand)
        {
            reserveringsliste.Add(Reservering);
            this.Tilstand = Tilstand;
            this.dato = dato;
        }

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

          public string getReservation(int index)
          {
              return reserveringsliste[index];
          }


          public virtual DateTime PropertyDato
          {
              get { return dato ; }
              set { dato = value; }
          }
       
        public virtual string PropertyTilstand
        {
            get { return Tilstand; }
            set { Tilstand = value; }
        }
Avatar billede Skynet Mester
20. april 2008 - 17:01 #7
jeg tror jeg laver public virtual string PropertyTilstand om til en boolsk værdi
Avatar billede Skynet Mester
20. april 2008 - 17:14 #8
Så problemet er at jeg skal have lavet en foreach  som løber min liste af flasker igennem (Flaskeliste) og søger på datoen og på "ok", som måske skal laves til(true/false)

Her er flaske objektet: new Flaske("ow", new DateTime(2008, 05, 21), "ok", 43)

og her er hvordan den laves public Flaske(string Reservering, DateTime dato, string Tilstand, int FlaskeID) :
Avatar billede lifo Nybegynder
20. april 2008 - 22:28 #9
foreach(Flaske f in Flaskeliste)
{
  if(f.PropertyDato > dateToFind && f.PropertyTilstand == "ok")
  {
    checkedListBox1.Items.Add(f);
  }
}
en anden måde at gøre det

checkedListBox1.Items.AddRange(
FlaskeLliste.FindAll(delegate(Flaske f) { return f.PropertyDato > dateToFind && f.PropertyTilstand == "ok"; }));
Avatar billede Skynet Mester
23. april 2008 - 14:24 #10
tak, det ser ud til at virke..

kan du også lave foreach når jeg har lavet disse modifikationer

Flaske klassen indeholder nu en type som hedder reservering, reservering består af en dato og et navn.

reservering
public Reservering(string reserveringsnavn, DateTime dato)

nye flaske
public List<Reservering > reserveringsliste = new List<Reservering >()
public Flaske(Reservering Reservering, string Tilstand, int FlaskeID) :
{
reserveringsliste.Add(Reservering);
}

og man kan hente reserveringer fra flaskeobjektet:
public Reservering getReservation(int index)
    {
      return reserveringsliste[index];
    }

outputtet er en override af ToString fra reservering
public override string ToString()
        {
            return PropertyReserveringsnavn + "dato" + PropertyDato;
     
        }


Så jeg skal have lavet lykken som gennemløber alle i indexet, men problemet er så hvordan jeg ved hvor mange som er i listen, er der en metode, så den bare løber alle igennem:
(jeg forestiller mig at lykken bliver placeret i flaskeklassen, og således er en ny metode):

public Reservering FINDALL(DateTime dato)
          {
             
        foreach(Reservering r in reserveringsliste)
{
  if(r.PropertyDato == dato)
  {
      return r.PropertyDato;
  }
}

           
Jeg har et par syntaks fejl i min kode?
Avatar billede Syska Mester
24. april 2008 - 01:11 #11
public override string ToString()
        {
            return PropertyReserveringsnavn + "dato" + PropertyDato;
   
        }

hvis PropertyDato er en DateTime ... så kan du ikke gøre det ...

Hvad compiler du med ? Den burde brokke sig ... og faktisk fortælle dig hvad der går galt ... og så er det jo bare at rette de fejl ... også nemmere hvis du poster dem, altså fejlene ...

Er det programmering på et gymnasium ?

// ouT
Avatar billede Skynet Mester
24. april 2008 - 09:21 #12
Hej,

det er desværre en DateTime. Jeg læser batchlor i IT på andet semester, desværre har vi kun haft en måneds undervisning i c# og det er de færreste af os som har forsået det på et niveau, så vi kan kode :)

De outputs fra VS 2008 kan jeg p.t. ikke bruge til så meget, da jeg ikke helt forstår hvor jeg skal rette, men jeg skal nok huske at skrive dem i mine indlæg.
Avatar billede Skynet Mester
24. april 2008 - 13:31 #13
med den nye reserveringklasse er det løst med denne metode

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

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

Men eftersom at mit spørgsmål og kode har været lidt rodet i denne tråd, vil jeg gerne give alle points
Avatar billede Syska Mester
25. april 2008 - 16:41 #14
Ahhh, ja ... det er ikke altid undervisningen er god ... og misser man et par timer, kan der nemt blive et stort hul, kender det godt.

Det med beskeder fra compilering, er også mere så vi ikke skal kigge så grundigt på koden, for at kunne se hvor egentuelle fejl er henne ... :-)

Jeg smider et svar, hvis noget af det jeg har skrevet virkede.

// ouT
Avatar billede Syska Mester
25. april 2008 - 16:41 #15
skulle være svar :-)
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