Avatar billede swamboo Seniormester
27. januar 2008 - 13:24 Der er 6 kommentarer og
1 løsning

Hvis der ingen dato er

Hejsa.
Jeg indlæser en fil med følgende linie:

        public DateTime Last_district_change
        { get { return Last_district_change; } set { last_district_change = value; } }

Men hvordan får jeg den til at indsætte datoen 01.01.1970 hvis der IKKE er en dato at indlæse?

På forhånd tak!
Avatar billede nielle Nybegynder
27. januar 2008 - 14:07 #1
Sådan?

        public DateTime Last_district_change
        {
            get
            {
                return (last_district_change != DateTime.MinValue)
                    ? last_district_change
                    : new DateTime(1970, 1, 1);
            }
            set { last_district_change = value; }
        }
Avatar billede swamboo Seniormester
27. januar 2008 - 14:29 #2
Hmmm - jeg kan ikke rigtig tjekke om det virker. Måske jeg har lavet en anden fejl - men hver gang jeg rører ved variablen får jeg fejlen: System.StackOverflowException was unhandled

Måske fejlen ligger her:
Lbl_Last_change.Text = district.Last_district_change.ToString("dd.MM.yyyy");
Avatar billede nielle Nybegynder
27. januar 2008 - 14:32 #3
Det er nok fordi  at du i dit oprindelige eksempel har en cirkulær reference - i get kalder Last_district_change sig selv:

public DateTime Last_district_change
{ get { return Last_district_change; }

skal rettes til:

public DateTime Last_district_change
{ get { return last_district_change; }

Men det har jeg jo allerede gjort i den kode jeg viste?
Avatar billede swamboo Seniormester
27. januar 2008 - 14:49 #4
Det beklager jeg meget - tænk at et stort bogstav laver så meget rod...

Tak for din hurtige hjælp - det virker perfekt.
I dit svar - gider du ikke lige nævne hvad ? og : betyder (hvis det kan gøres kort - og du syntes det er ok - det er første gang jeg ser det brugt sådan)
Avatar billede hmortensen Nybegynder
27. januar 2008 - 15:02 #5
Det er en kort notation af en if-sætning.
resultat = (kriterie) ? sand : falsk;

som er det samme som:
if (kriterie)
{
  resultat = sand;
}
else
{
  resultat = falsk;
}

Ang. det med stort/lille l, det kan løses ved en anden kodestandard.

private DateTime _lastDistrictChange;

public DateTime LastDistrictChange
{
}
Avatar billede nielle Nybegynder
27. januar 2008 - 15:09 #6
C# er case sensitiv - det er vigtigt at man husker det. Lad derfor helst være med at brug varianter af det samme navn - hvor at du skifter mellem store og små bogstaver. På den måde undgår du lignende fejl i fremtiden.


?: er "ternary" operatoren - eller "conditionary" operatoren. Egentlig er den bare en forkortning af en almidnelig if-themn-else:

return (last_district_change != DateTime.MinValue)
    ? last_district_change
    : new DateTime(1970, 1, 1);

- kan skrives på den lidt længere form:

if (last_district_change != DateTime.MinValue)
    return last_district_change;
else
    return new DateTime(1970, 1, 1);


Normalt vi man se den samlet på een linje:

return (last_district_change != DateTime.MinValue) ? last_district_change : new DateTime(1970, 1, 1);

- men jeg foretrække for det meste at dele den over flere linje når de enkelte led er relativt lange.
Avatar billede nielle Nybegynder
27. januar 2008 - 15:10 #7
... 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