Milyen típusátalakítási típusok léteznek C#-ban?
sobes.tech MI
Válasz az MI-től
C#-ban két fő típusú típuskonverzió létezik:
-
Kifejezett konverzió (Explicit conversion): A
(típus)operátor használatát igényli. Akkor használjuk, amikor a fordító nem tudja automatikusan biztonságosan végrehajtani a konverziót, például az alap osztályból származó osztályba vagy nagyobb pontosságú típusból kisebb pontosságúba (példáuldouble-rólint-re) történő konverzió esetén. Ez adatvesztéshez vagy futásidejű hibához (InvalidCastException) vezethet.// explicit konverzió double-ról int-re double d = 123.45; int i = (int)d; // i értéke 123 lesz // Objektum konvertálása egy adott típusra object obj = "Hello"; string s = (string)obj; // s értéke "Hello" lesz -
Rejtett konverzió (Implicit conversion): Automatikusan végrehajtódik a fordító által, amikor a konverzió ismert és biztonságos, azaz adatvesztés nélkül. Például
int-rőldouble-re.// implicit konverzió int-ről double-re int x = 10; double y = x; // y értéke 10.0 lesz // Származtatott osztály konvertálása az alap osztályra class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // implicit konverzió
Ezenkívül léteznek az as és is operátorok, amelyek szintén a típuskonverzióhoz tartoznak, de sajátosságokkal:
-
asoperátor: Megkísérli a típuskonverziót, ha lehetséges, ésnull-t ad vissza, ha nem sikerül. Nem dob InvalidCastException kivételt. Csak referencia típusokkal és Nullable típusokkal használható.// `as` operátor használata object obj2 = "World"; string s2 = obj2 as string; // s2 "World" lesz object obj3 = 123; string s3 = obj3 as string; // s3 null lesz -
isoperátor: Ellenőrzi, hogy egy objektum példánya-e egy adott típusnak vagy annak származékának.truevagyfalseértéket ad vissza. A legújabb C# verziókban pattern matching-ként is használható, ami lehetővé teszi a típusellenőrzést és a konvertálást egy lépésben.// `is` operátor használata típusellenőrzéshez object obj4 = "Example"; if (obj4 is string) { // Ha az objektum string } // `is` pattern matching-ként if (obj4 is string str) { // str itt elérhető stringként }