C# - Tetszőleges adattípus konvertálása egy másik adattípusra

forráskód letöltése
A Convert osztály felhasználásával tetszőleges típusú adatot tudunk konvertálni egy másik típusra.
A Convert számos To kezdetű függvénnyel rendelkezik. Mindegyik függvénynek számos verziója létezik, méghozzá szinte minden adattípusra. Ez biztosítja, hogy szinte mindent mindenre tudunk konvertálni a Convert osztály használatával.
Persze dátum típust ne próbáljunk konvertálni logikai típussá, hiszen ez nem értelmezhető művelet és amúgy is csak hibaüzenet lenne a végeredménye, még akkor is, ha létezik a Convert osztályban ToBoolean függvény, mely paraméterként DateTime-ot vár.
A Convert az alábbi To kezdetű függvényekkel rendelkezik:
  • ToBase64String
  • ToBoolean
  • ToByte
  • ToChar
  • ToDateTime
  • ToDecimal
  • ToDouble
  • ToInt16
  • ToInt32
  • ToInt64
  • ToSByte
  • ToSingle
  • ToString
  • ToUInt16
  • ToUInt32
  • ToUInt64
Ezek mindegyike egy paramétert vár: a konvertálandó értéket a függvény nevében megadott típusra. Minden függvénynek annyi típusa van, ahány To kezdetű függvény. Egy-egy ilyen függvénynek mindegyik típushoz van tehát egy-egy megfelelője, még akkor is, ha a konverzió nem értelmezhető, mint ahogy ezt a bevezetőben már említettük.
Dátum típust tehát nem tudunk logikaira konvertálni, de például egy egész számot igen. Ekkor ha a szám nem nulla, akkor igaz, különben hamis lesz az eredmény.
    private void button1_Click(object sender, System.EventArgs e)
    {
      label1.Text = Convert.ToBoolean(55).ToString();
    }
A Convert osztályban találunk még egy GetTypeCode függvényt, mellyel egy adott változó típusát tudjuk lekérdezni.
    private void button2_Click(object sender, System.EventArgs e)
    {
      label2.Text = Convert.GetTypeCode(55).ToString();
    }
A ChangeType használatával az első parméterben megadott objektum típusát tudjuk megváltoztatni a második paraméterben megadottra. Visszatérési értékként egy object-ben kapjuk meg az új objektumot a kért típusban.
    private void button3_Click(object sender, System.EventArgs e)
    {
      int i = 55;
      string s = (string)Convert.ChangeType(i, TypeCode.String);
      label3.Text = s;
    }