Millised on C#-s tüübi teisendamise tüübid?
sobes.tech AI
Vastus AI-lt
C# kehas on kaks peamist tüüpi teisendusi:
-
Selge teisendus (Explicit conversion): Nõuab
(tüüp)operaatori kasutamist. Seda kasutatakse, kui kompilaator ei saa turvaliselt automaatselt teisendada, näiteks põhiklassist pärandatud klassi või suurema täpsusega tüübi väiksemale (näiteksdoubleint-ks). See võib põhjustada andmekadu või viga täitmise ajal (InvalidCastException).// Selge `double`-i teisendus `int`-ks double d = 123.45; int i = (int)d; // i väärtus on 123 // Objekti teisendus konkreetseks tüübiks object obj = "Hello"; string s = (string)obj; // s väärtus on "Hello" -
Kohene teisendus (Implicit conversion): Toimub automaatselt kompilaatoriga, kui teisendus on teada ja turvaline, st andmekadu ei toimu. Näiteks
int-istdouble-ks teisendus.// `int`-ist `double`-ks kohene teisendus int x = 10; double y = x; // y väärtus on 10.0 // Pärandatud klassi teisendus põhiklassiks class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Kohene teisendus
Lisaks on olemas operaatorid as ja is, mis samuti kuuluvad teisendusse, kuid oma omadustega:
-
Operaator
as: Teeb teisenduse, kui see on võimalik, ja tagastabnull, kui mitte. Ei viska InvalidCastException. Kasutatakse ainult viidatüüpide ja Nullable-tüüpide puhul.// `as` operaatori kasutamine object obj2 = "World"; string s2 = obj2 as string; // s2 väärtus on "World" object obj3 = 123; string s3 = obj3 as string; // s3 väärtus on null -
Operaator
is: Kontrollib, kas objekt on teatud tüüpi või selle pärand. Tagastabtruevõifalse. Viimastes C# versioonides saab seda kasutada pattern matching'uga, et korraga kontrollida ja teisendada.// `is` operaatori kasutamine tüübi kontrollimiseks object obj4 = "Example"; if (obj4 is string) { // Tegevused, kui objekt on string } // `is` pattern matching'uga if (obj4 is string str) { // str on siin saadaval stringina }