» »

[C#] Osnove

[C#] Osnove

cistnov ::

Zdravo. Bi mi lahko kdo na kratko povedal oz. podal literaturo, kako je s temi pretvorbami "int", "num", "string", "double", Convert.ToINt32 in podobno. Ne zastopim povsem dobro, kaj je tu fora oz. katere pretvorbe lahko izvajaš. Recimo hitro dobim error "cannot convert int to string"....

Hvala...
  • spremenilo: cistnov ()

kuall ::

Uoprabit moraš logiko. Ni tako, da se napiflaš nekih pravil, kaj lahko pretvoriš v kaj in kaj ne. Če bi ti bile jasne osnove računalništva bi to logiko lažje uporabljal . Torej C in assembler je precej koristna stvar se naučit, če hočeš bit dober C# programer, ti bo pa tudi lažje vse skupaj, ne boš postavljal takihle vpršanj. Torej pejt na C za par mesecev, potem pa pridi nazaj na C#.

V bistvu pa je za temi pretvorbami eno filozofsko pravilo:
lahko pretvoriš tip A v B, če so vse lastnosti od B tudi v A (ni pa nujno obratno, če te ne moti izguba informacij). Ne moreš pa pretvorit, če ima B vsaj eno lastnost, ki je nima A.
Leva lahko pretvoriš v zveri, ker imajo zveri vse lastnosti kot lev. Izgubiš neke lastnosti s to pretvorbo, ampak če jih ne rabiš je ok.
Ne moreš pa leva pretvorit v rastline, ker rastline nimajo vseh lastnosti, ki jih imajo levi.

Zgodovina sprememb…

  • spremenilo: kuall ()

joze67 ::

Težko boš dobil boljšo literaturo, kot jo ponuja proizvajalec:
Casting and type conversions (C# Programming Guide)
Tudi zato, ker je M$ dokumentacija tipično v redu.

Numerični tipi - prevajalnik lahko implicitno pretvori, kadar pri tem na noben način ne pride do izgube podatkov. Tako ima na primer byte (1 byte) zalogo vrednosti 0..255 in ga lahko spravimo v npr. short (2 byta, -32768 .. 32767) in ushort (2 byta, 0..65535). Po drugi strani ima sbyte (1 byte) zalogo vrednosti -128..127 in ga lahko spravimo v short (2 byta, -32768 .. 32767) ne pa tudi v ushort (2 byta, 0..65535), ker bi izgubili negativne vrednosti (ali vsaj pravilno interpretacijo).

Implicit numeric conversions table (C# Reference)

Izrecno (eksplicitno) lahko vedno zahtevaš tudi druge pretvorbe, ker sprejmeš posledice nase (ali tako vsaj misli prevajalnik). Razred Convert izvaja izrecne pretvorbe in pri tem meče smiselne napake (exceptions)

Niz je popolnoma druge vrste zverina. Na splošno ne moreš pričakovati, da se bo niz kar pretvoril v številko. Pa tudi v drugo stran so težave - uporabimo ločilo za tisočice? Koliko decimalnih mest? Zato imaš na voljo posebne funkcije, X.Parse in X.TryParse za pretvorbo iz niza v X (če gre) in X.ToString() ter celotno mašinerijo za formatiranje za pretvorbo v niz.

Ko prideš pa do objektov, beri zgoraj. Poleg tega lahko vsak razred določi svoj nabor implicitnih in izrecnih pretvorb v druge razrede.

win64 ::

joze67 je izjavil:

Težko boš dobil boljšo literaturo, kot jo ponuja proizvajalec:
Casting and type conversions (C# Programming Guide)
Tudi zato, ker je M$ dokumentacija tipično v redu.

Numerični tipi - prevajalnik lahko implicitno pretvori, kadar pri tem na noben način ne pride do izgube podatkov. Tako ima na primer byte (1 byte) zalogo vrednosti 0..255 in ga lahko spravimo v npr. short (2 byta, -32768 .. 32767) in ushort (2 byta, 0..65535). Po drugi strani ima sbyte (1 byte) zalogo vrednosti -128..127 in ga lahko spravimo v short (2 byta, -32768 .. 32767) ne pa tudi v ushort (2 byta, 0..65535), ker bi izgubili negativne vrednosti (ali vsaj pravilno interpretacijo).

Implicit numeric conversions table (C# Reference)

Izrecno (eksplicitno) lahko vedno zahtevaš tudi druge pretvorbe, ker sprejmeš posledice nase (ali tako vsaj misli prevajalnik). Razred Convert izvaja izrecne pretvorbe in pri tem meče smiselne napake (exceptions)

Niz je popolnoma druge vrste zverina. Na splošno ne moreš pričakovati, da se bo niz kar pretvoril v številko. Pa tudi v drugo stran so težave - uporabimo ločilo za tisočice? Koliko decimalnih mest? Zato imaš na voljo posebne funkcije, X.Parse in X.TryParse za pretvorbo iz niza v X (če gre) in X.ToString() ter celotno mašinerijo za formatiranje za pretvorbo v niz.

Ko prideš pa do objektov, beri zgoraj. Poleg tega lahko vsak razred določi svoj nabor implicitnih in izrecnih pretvorb v druge razrede.


Omembe vredno je tudi: Ko delaš z parse/tostring ne pozabit na trenutno nastavljen culture(Thread.CurrentThread.CurrentCulture). Če je recimo nastavljena slovenščina, bo tostring recimo vrnil 10,5. Če je angleščina ti bo tostring vrnil 10.5. Enako velja tudi pri parse.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# program za pretvorbo v desetiško število z rekurzijo

Oddelek: Programiranje
81355 (1078) MrStein
»

[C#] Operacija IN in ALI med dvema int številoma

Oddelek: Programiranje
111074 (887) LeQuack
»

[C#] int v byte[] in nazaj

Oddelek: Programiranje
131730 (1502) BlueRunner
»

[C#] Funkcija za testiranje, če je IP slovenski

Oddelek: Programiranje
91489 (1247) MTm2H37rqt7B
»

double

Oddelek: Programiranje
201280 (1085) Imortales

Več podobnih tem