Avatar billede orca Nybegynder
04. september 2003 - 00:51 Der er 10 kommentarer og
2 løsninger

Referenceproblemer iblandt klasser ved property

Jeg har flere referenceproblemer :/.

Jeg har en property i klassen C1:

public int ID
{
    get { return id; }
    set
    {
        id = value;
        itemIcon = C2.GetNameFromID(id) + "/group.gif";
    }
}

"id" er en privat int. I GetNameFromID funktionen prøver jeg at bruge den int der bliver vedsendt (kalder .ToString()) på den, men jeg får en reference not set to an instance fejl.

Det forstår jeg dog ikke da ints, såvidt jeg forstår, er value types. Jeg bør således ikke få en reference sendt med, men derimod en kopi af værdien? Eller misforstår jeg noget?

Mvh Mark
Avatar billede nielslbeck Nybegynder
04. september 2003 - 02:18 #1
Sikker på, det ikke er C2 der giver "Reference not set to..."?
Avatar billede arne_v Ekspert
04. september 2003 - 07:40 #2
Umiddelbart er det jo meget nærliggende at starte med at spørge:
er C2 et objekt eller en klasse ?

Hvis det er en klasse - er GetNameFromID så en statisk metode ?
Avatar billede Syska Mester
04. september 2003 - 09:25 #3
med på en lytter
Avatar billede odegaard Nybegynder
04. september 2003 - 10:04 #4
Det virker også lidt pudsigt at du mener du erklærer et objekt i C1, men rent faktisk kalder C2.
Hvordan har du erklæret C2/C1 ? Du skal først erklære en instans af den, før du kan kalde GetNameFromID.
Fx.
C2 _c2 = new C2();
itemIcon = _c2.GetNameFromId(id);
Avatar billede orca Nybegynder
04. september 2003 - 18:40 #5
Jo, det er C2 der giver reference fejlen. Jeg har en instans af C1. Denne kalder en statisk funktion i C2 når jeg sætter dens property ID.

Hvis jeg bytter linien:
C2.GetNameFromID(id);

Ud med:
C2.GetNameFromID(2);

Altså bytter "id" ud med en konstant, så får jeg ikke fejlen og alt virker. Altså må det jo næsten være "id" der giver et problem mht reference.

Håber det opklarer lidt :)
Avatar billede burningice Nybegynder
04. september 2003 - 19:00 #6
itemIcon = C2.GetNameFromID(value)

funker heller ikke?
Avatar billede orca Nybegynder
04. september 2003 - 19:18 #7
Den har jeg også prøvet cyberfessor, desværre med samme resultat. Men jeg kan specielt ikke forstå det da en int da burde være en value type, og således burde der på ingen måde kunne opstå referenceproblemer?
Avatar billede burningice Nybegynder
04. september 2003 - 19:38 #8
dumt spørgsmål... men id er sælvfølgelig erklæret som et int field i din C1-klasse ?

du har umiddelbart ret i, at int er en ValueType, og derfor befinder sig på stacken... det er dog desværre ikke helt så enkelt alligevel, så derfor tror jeg godt du kan få en "NullReferenceException" på en int
Avatar billede orca Nybegynder
04. september 2003 - 20:02 #9
private int id = 0;

Sådan er den erklæret.
Avatar billede orca Nybegynder
04. september 2003 - 23:37 #10
Jeg tager lige og henter en spand vand og kaster den ud over mig selv...

Fejlen var at jeg som ID værdi brugte tallet 3 i min kode, dette tal betød at der ikke blev returneret en værdi fra databasen. Således fik jeg min reference fejl når jeg kaldte .ToString() på en ExecuteScalar() funktion.

Da jeg testede med konstanten 2, så kom fejlen ikke, netop fordi 2 resulterede i en værdi fra databasen...

Smid lige nogle svar, i skal selvfølgelig have point for at bruge tid på så tåbelig en fejl fra min side :)
Avatar billede burningice Nybegynder
05. september 2003 - 00:11 #11
doh... ja, sådan en fejl burde du jo fange allerede i dit DataAccess-lag:

public object ExecuteScalar() {

object o = command.ExecuteScalar();

if (o == null) {
  throw new NullReferenceException("Der var ingen post der matchede din forespørgsel");
}

return o;

}
Avatar billede burningice Nybegynder
05. september 2003 - 00:11 #12
det var det 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