Avatar billede trenskow Nybegynder
28. november 2004 - 22:30 Der er 6 kommentarer og
1 løsning

hjælp til objekt

Hejsa allesammen
Jeg er ved at lege lidt med C#, og er nu kommet i en knibe som jeg ikke kan finde ud af.
Jeg får denne fejl "System.NullReferenceException" og jeg har debugget mig frem til, at det er her hvor problemet opstår.

jeg har et sted i min klasse de her 2 linier.

opretHold(new Hold(hjemmehold, 0,0,0,0,0,0));

her er metoden den kalder

private void opretHold(Hold hold)
{
    // OPRET HOLD
    resultater.Add(hold);
}

her er hold klassen

using System;

namespace fodbold
{
    /// <summary>
    /// Summary description for Hold.
    /// </summary>
    public class Hold
    {
        private int runde, holdID, point;
        private string holdNavn;
        private int vundneKampe;
        private int uafgjorteKampe;
        private int tabteKampe;
        private int maalImod;
        private int maalFor;


        public Hold(string holdnavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor, int point)
        {
            this.holdNavn = holdNavn;
            this.vundneKampe = vundneKampe;
            this.uafgjorteKampe = uafgjorteKampe;
            this.tabteKampe = tabteKampe;
            this.maalImod = maalImod;
            this.maalFor = maalFor;
            this.point = point;           
        }

        public Hold(string holdnavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor)
        {
            this.runde = runde;
            this.holdNavn = holdNavn;
            this.vundneKampe = vundneKampe;
            this.uafgjorteKampe = uafgjorteKampe;
            this.tabteKampe = tabteKampe;
            this.maalImod = maalImod;
            this.maalFor = maalFor;
           
        }

       
        public Hold(int holdID, string holdnavn)
        {
            this.holdID = holdID;
            this.holdNavn = holdnavn;
        }
        public Hold(string holdNavn)
        {
            this.holdNavn = holdNavn;
        }
        public Hold()
        {
        }
        public int getRunde()
        {
            return runde;
        }
        public int getPoint()
        {
            return point;
        }
        public void setPoint(int p)
        {
            point = point + p;
        }
   
        public int getVundneKampe()
        {
            return vundneKampe;
        }
        public int getUafgjorteKampe()
        {
            return uafgjorteKampe;
        }
        public int getTabteKampe()
        {
            return tabteKampe;
        }
        public int getMaalHjemme()
        {
            return maalFor;
        }
        public int getMaalUde()
        {
            return maalImod;
        }
        public void setMaalHjemme(int m)
        {
            maalFor = maalFor + m;
        }
        public void setMaalUde(int m)
        {
            maalImod = maalImod + m;
        }
        public void setVundneKampe(int k)
        {
            vundneKampe = vundneKampe + k;
        }
        public void setUafgjorteKampe(int k)
        {
            uafgjorteKampe = uafgjorteKampe + k;
        }
        public void setTabteKampe(int k)
        {
            tabteKampe = tabteKampe + k;
        }
        public void setVUTKampe(int v, int u, int t)
        {
            vundneKampe = vundneKampe + v;
            uafgjorteKampe = uafgjorteKampe + u;
            tabteKampe = tabteKampe + t;
        }
        public string getHoldNavn()
        {
            return holdNavn;
        }
        public void setMaal(int hjemmeMaal, int udeMaal)
        {
            maalFor = maalFor + hjemmeMaal;
            maalImod = maalImod + udeMaal;
        }
        public override string ToString()
        {
            return holdNavn;
        }
       
    }
}

problemmet ligger i når jeg kalder opretHold med de parametre... når jeg debugger, kan jeg se, at nede i private void opretHold(Hold hold) at der er hold sat til at være null i holdnavn, og 0 alle andre steder.
Avatar billede arne_v Ekspert
28. november 2004 - 22:39 #1
Mit umiddelbare gæt ville da være at det var "resultater" som var null ...
Avatar billede trenskow Nybegynder
29. november 2004 - 00:51 #2
Nej, jeg er ikke sikker på det. For hvis jeg laver den her istedet for
Hold h = new Hold(hjemmehold, 0,0,0,0,0,0);
opretHold(h);

så siger den under debugging at alle parametre under h er null
Avatar billede trenskow Nybegynder
29. november 2004 - 01:01 #3
men hvis det er resultater som er null, hvad gør jeg så forkert
Avatar billede casualty Nybegynder
29. november 2004 - 08:50 #4
Der er forskel på "holdnavn i dine konstruktører:

public Hold(string holdnavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor, int point)
{
  this.holdNavn = holdNavn;
  this.vundneKampe = vundneKampe;
  this.uafgjorteKampe = uafgjorteKampe;
  this.tabteKampe = tabteKampe;
  this.maalImod = maalImod;
  this.maalFor = maalFor;
  this.point = point;           
}

Din globale variabel hedder "holdNavn" og i konstruktøren hedder den "holdnavn"

Det her virker:
***********************************
using System;

namespace fodbold {
  public class Hold {
    private int runde, holdID, point;
    private string holdNavn;
    private int vundneKampe;
    private int uafgjorteKampe;
    private int tabteKampe;
    private int maalImod;
    private int maalFor;

    public Hold(string holdNavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor, int point) {
      this.holdNavn = holdNavn;
      this.vundneKampe = vundneKampe;
      this.uafgjorteKampe = uafgjorteKampe;
      this.tabteKampe = tabteKampe;
      this.maalImod = maalImod;
      this.maalFor = maalFor;
      this.point = point;   
    }

    public Hold(string holdNavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor) {
      this.runde = runde;
      this.holdNavn = holdNavn;
      this.vundneKampe = vundneKampe;
      this.uafgjorteKampe = uafgjorteKampe;
      this.tabteKampe = tabteKampe;
      this.maalImod = maalImod;
      this.maalFor = maalFor;   
    }

    public Hold(int holdID, string holdNavn) {
      this.holdID = holdID;
      this.holdNavn = holdNavn;
    }

    public Hold(string holdNavn) {
      this.holdNavn = holdNavn;
    }

    public Hold() {
    }

    public int getRunde() {
      return runde;
    }

    public int getPoint() {
      return point;
    }

    public void setPoint(int p) {
      point = point + p;
    }
   
    public int getVundneKampe() {
      return vundneKampe;
    }

    public int getUafgjorteKampe() {
      return uafgjorteKampe;
    }

    public int getTabteKampe() {
      return tabteKampe;
    }

    public int getMaalHjemme() {
      return maalFor;
    }

    public int getMaalUde() {
      return maalImod;
    }

    public void setMaalHjemme(int m) {
      maalFor = maalFor + m;
    }

    public void setMaalUde(int m) {
      maalImod = maalImod + m;
    }

    public void setVundneKampe(int k) {
      vundneKampe = vundneKampe + k;
    }

    public void setUafgjorteKampe(int k) {
      uafgjorteKampe = uafgjorteKampe + k;
    }

    public void setTabteKampe(int k) {
      tabteKampe = tabteKampe + k;
    }

    public void setVUTKampe(int v, int u, int t) {
      vundneKampe = vundneKampe + v;
      uafgjorteKampe = uafgjorteKampe + u;
      tabteKampe = tabteKampe + t;
    }

    public string getHoldNavn() {
      return holdNavn;
    }

    public void setMaal(int hjemmeMaal, int udeMaal) {
      maalFor = maalFor + hjemmeMaal;
      maalImod = maalImod + udeMaal;
    }

    public override string ToString() {
      return holdNavn+" - "+vundneKampe+" - "+uafgjorteKampe+" - "+tabteKampe+" - "+maalImod+" - "+maalFor+" - "+point;
    }
  }
}
**********************************************

Mvh Casualty
Avatar billede casualty Nybegynder
29. november 2004 - 09:00 #5
Det er en klassiker... I øvrigt ville jeg nok vælge at anvende properties på dine variabler. Get og Set metoder er Java, Properties er C#

Eksempel:

//I java ville man sige:
public string getHoldNavn() {
  return holdNavn;
}
public void setHoldNavn() {
  return holdNavn;
}


//I C# bør man sige
public String HoldNavn{
  get{
    return holdNavn;
  }
  set{
  holdNavn = value;
  }
}

Forskellen er at du ville kunne kalde:
Hold mitHold = new Hold();
mitHold.HoldNavn = "Hjemmeholdet";

I stedet for:
Hold mitHold = new Hold();
mitHold.setNavn("Hjemmeholdet");

Husk Properties og Metodenavne med stort i C#
(Virker selvfølgelig med småt men det er ligesåmeget en standart som det er at de skal være med småt i java)...

Mvh Casualty
Avatar billede trenskow Nybegynder
29. november 2004 - 21:11 #6
ok, takker for svarene. Jeg vil kigge på det lige så snart jeg har tid
Avatar billede casualty Nybegynder
18. januar 2006 - 20:23 #7
Tak for points
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