Kokie yra tipų konvertavimo būdai C#-je?
sobes.tech AI
Atsakymas iš AI
C# yra du pagrindiniai tipų konvertavimo būdai:
-
Aiškus konvertavimas (Explicit conversion): Reikalauja
(tipas)operatoriaus naudojimo. Naudojamas, kai kompiliatorius negali saugiai automatiškai atlikti konversijos, pavyzdžiui, kai konvertuojama iš pagrindinio į išvestinį klasę arba iš didesnės tikslumo rūšies į mažesnę (pvz.,doubleįint). Gali sukelti duomenų praradimą arba klaidą vykdymo metu (InvalidCastException).// Aiškus `double` į `int` konvertavimas double d = 123.45; int i = (int)d; // i bus 123 // Objekto konvertavimas į konkretų tipą object obj = "Hello"; string s = (string)obj; // s bus "Hello" -
Numanomas konvertavimas (Implicit conversion): Atliekamas automatiškai kompiliatoriaus, kai konversija yra žinoma ir saugi, t. y., nėra duomenų praradimo. Pavyzdžiui, konvertavimas iš
intįdouble.// `int` į `double` numanomas konvertavimas int x = 10; double y = x; // y bus 10.0 // Išvestinės klasės konvertavimas į pagrindinę class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Numanomas konvertavimas
Be to, yra operatoriai as ir is, kurie taip pat priklauso konvertavimui, bet su savo ypatybėmis:
-
Operatorius
as: Atlieka konvertavimą, jei įmanoma, ir grąžinanull, jei neįmanoma. Negauna išimties InvalidCastException. Naudojamas tik nuorodų tipams ir Nullable tipams.// `as` operatoriaus naudojimas object obj2 = "World"; string s2 = obj2 as string; // s2 bus "World" object obj3 = 123; string s3 = obj3 as string; // s3 bus null -
Operatorius
is: Patikrina, ar objektas yra tam tikro tipo arba išvestinio iš jo. Grąžinatruearbafalse. Naujausiose C# versijose gali būti naudojamas su pattern matching, leidžiant patikrinti ir konvertuoti vienu metu.// `is` operatoriaus naudojimas tipo patikrinimui object obj4 = "Example"; if (obj4 is string) { // Veiksmai, jei objektas yra eilutė } // `is` su pattern matching if (obj4 is string str) { // str yra prieinama kaip eilutė }