Avatar billede entracore Nybegynder
12. april 2004 - 18:43 Der er 9 kommentarer og
1 løsning

Guid problem

Hej

Jeg har en metode der tager imod en række parametre. Visse af disse parametre er af datatypen Guid.

Når jeg kalder min metode og skal sende parametre med får jeg et problem hvis min Guid parameter er tom eller blot skal indeholde en null værdi.

F.eks.

MIN METODE
==========
private void InsertTable(Guid Id, string Name, Guid FK_Id1, Guid FK_Id2)
{
// Et eller andet....
}

MIT KALD
========
InsertTable(GuidVariabel, "Navn", "", FK_GuidVariabel2)

Ovenstående kald vil give en fejl, ved "", da denne "værdi" ikke er af datatypen Guid. Er det muligt at sende en null værdi med i stedet for "" og hvordan skrives dette ?

På forhånd tak
Avatar billede burningice Nybegynder
12. april 2004 - 18:50 #1
Guid.Empty måske?
Avatar billede entracore Nybegynder
12. april 2004 - 18:52 #2
Måske, men Guid.Empty vil være lige med 0000-0000-00.. osv. Og det jeg er lidt ude efter er NULL ;-)
Avatar billede burningice Nybegynder
12. april 2004 - 19:00 #3
du kan ikke få en null-værdi, da GUID er en struct og ikke class
Avatar billede burningice Nybegynder
12. april 2004 - 19:01 #4
men, hvis det er din egen metode, så kan du jo behandle Guid.Empty på samme måde som hvis det var en null-værdi

private void InsertTable(Guid Id, string Name, Guid FK_Id1, Guid FK_Id2)
{
  if(FK_Id1 == Guid.Empty) {
      //FK_Id1 er lig med nul
  }
}
Avatar billede entracore Nybegynder
12. april 2004 - 19:02 #5
Det var ærgeligt - men så er jeg tilgengæld lidt forvirret, for hvad er en Struct ??? Hvis du svare på mit spørgsmål kan du ved samme lejlighed poste et svar :-)
Avatar billede arne_v Ekspert
12. april 2004 - 19:15 #6
En struct er en value type - ligesom en int.
Avatar billede arne_v Ekspert
12. april 2004 - 19:16 #7
Hvis ikke du kan bruge en speciel værdi til at simulere null med, så er
et alternativ at lave flere metoder med forskellige argumenter.
Avatar billede burningice Nybegynder
12. april 2004 - 19:19 #8
Der findes to typer variabler i C#, value-types og reference-types. Rent teknisk befinder value-types sig på stacken og reference-types på heapen, men behøves man ikke at tænke så meget over med mindre man skal til at memory-optimere sit program.

Types af typen structs befinder sig i value-types gruppen, mens at class'es er reference-types.

Det betyder, at når du opretter er object af en klasse, så indeholder din variabel faktisk bare en adresse, en pointer, til et sted i hukommelsen. Når du sætter din variabel til null, betyder det at din variabel ikke peger noget sted hen, den er tom.

Et object oprettet fra en struct indeholder derimod SELVE indholdet. Variabel peger ikke nogen steder hen, men indeholder selve de data man arbejder med.

Ovenstående er vigtigt at huske på når man

1) skal tjekke på værdier
2) kopierer variabler
  a) Hvis du har en variabel indeholdene et dataset, og du opretter en ny variabel der peger på den første, så vil begge variabler pege på det SAMME dataset (adresse i hukommelsen)
  b) Hvis du derimod har en variabel der indeholder en Guid, og du opretter en ny variabel indeholdende den første, så har du to FORSKELLIGE Guids der er uafhængige af hinanden
3) manipulerer med input-argumenter i en metode
  a) Hvis man ændrer på indholdet af et argument indeholdende en reference-type ændrer du på samme indhold som din kode udenfor metoden benytter sig af

Det var overordnet meget kort remset op hvad det går ud på. Det kan godt virke lidt langhåret og skræmmende hvis man ikke har arbejdet med det før, men det er noget man skal stifte bekendtskab med før eller siden hvis man vil lave højtydende applikationer.
Avatar billede burningice Nybegynder
12. april 2004 - 19:20 #9
... og det var det svar :)
Avatar billede entracore Nybegynder
12. april 2004 - 21:10 #10
Mange tak :-)
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