Sobes.tech
Junior

Milyen típusátalakítási típusok léteznek C#-ban?

sobes.tech MI

Válasz az MI-től

A C#-ban két fő típuskonverziós mód létezik: explicit és implicit.

Implicit típuskonverzió

Automatikusan történik, amikor a fordító biztos abban, hogy a konverzió biztonságos, és nem fog adatvesztést okozni. Például kisebb értéktartományú típusból nagyobb értéktartományú típusba.

// Implicit típuskonverzió int-ről long-ra
int i = 100;
long l = i;

Explicit típuskonverzió

A kódba kell írni a konverziós operátort ((típus)), és akkor használjuk, amikor a konverzió adatvesztést okozhat vagy kivételt válthat ki. Szükséges nagyobb tartományú típusból kisebbre vagy nem összefüggő típusok között.

// Explicit típuskonverzió double-ról int-re
double d = 123.45;
int i = (int)d; // A törtrészt levágja

// Explicit típuskonverzió object-ről string-re
object obj = "Hello";
string s = (string)obj;

// Konverzió as és is operátorokkal
object objAs = "World";
string sAs = objAs as string; // null-t ad, ha nem lehetséges a konverzió
if (objAs is string) // Ellenőrzi, hogy az objektum string típusú-e
{
    string sIs = (string)objAs;
}

Az explicit konverzió, az as és az is összehasonlítása

Művelet Leírás Hibalehetőség
(Típus) kifejezés Explicit konverzió. Pontos típusmegfelelés szükséges. InvalidCastException
kifejezés as Típus Megpróbálja konvertálni a típust. Csak referencia típusokra és null értéket elfogadó típusokra működik. null-t ad vissza
kifejezés is Típus Ellenőrzi, hogy a kifejezés konvertálható-e a megadott típusra. Boolean érték (true/false)

Egyedi típuskonverziók

A fejlesztő saját explicit és implicit konverziós operátorokat definiálhat a implicit és explicit kulcsszavak segítségével.

// Egyedi implicit konverzió példája
public class Inches
{
    public int Value { get; set; }
    public static implicit operator Millimeters(Inches i)
    {
        return new Millimeters { Value = i.Value * 25 };
    }
}

public class Millimeters
{
    public int Value { get; set; }
}

// Használat
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Implicit konverzió
// Egyedi explicit konverzió példája
public class Kilograms
{
    public int Value { get; set; }
}

public class Pounds
{
    public int Value { get; set; }
    public static explicit operator Kilograms(Pounds p)
    {
        return new Kilograms { Value = (int)(p.Value / 2.20462) };
    }
}

// Használat
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Explicit konverzió