Oprócz operatora konwersji możemy użyć klasy System.Convert. Stosowanie tej klasy ma pewne zalety, które opiszę w tym wpisie. Przekształcić typ możemy na następujące typy:
– Base64CharArray
– Base64String
– Boolean
– Byte
– Char
– DateTime
– Decimal
– Double
– Int16
– Int32
– Int64
– SByte
– Single
– String
– UInt16
– UInt32
– UInt64
Konwersję wykonuje się w bardzo prosty sposób:
Zobaczmy przykład:

1.Zadeklaruję zmienną typu double, o nazwie liczba. Nadam jej wartość 10.1

using System;
class Program {
    static void Main() {
        double liczba = 10.1;
    }
}

2. Zadeklaruję zmienną typu int, o nazwie liczba2. Użyję klasy System.Convert do przekształcenia typu double na typ int.

Aby to zrobić wpisujemy Convert. a następnie wybieramy z listy (dzięki IntelliSense ) interesującą nas metodę konwersji:

klasa System.Convert

Rys. Lista dostępnych metod konwersji klasy Convert

Następnie w nawiasie podajemy zmienną lub wyrażenie z którego chcemy przekształcać:

int  liczba2 = Convert.ToInt16(liczba);
           

Wróćmy do przykładu:

using System;
class Program {
    static void Main() {
        double liczba = 10.1;
        int  liczba2 = Convert.ToInt16(liczba);
    }
}

3.W ostatnim kroku wyświetlę wynik na ekranie:

using System;
class Program {
    static void Main() {
        double liczba = 10.1;
        int  liczba2 = Convert.ToInt16(liczba);
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Oto rezultat działania aplikacji:

klasa System.Convert

Rys. Rezultat działania aplikacji

Użycie klasy System.Convert jest bardzo proste. Możemy za jej pomocą dokonywać konwersji praktycznie wszystkich typów wbudowanych.

Konwersja jawna typów liczbowych

A co w przypadku gdy przekształcamy zmienną za pomocą operatora konwersji, której wartość nie mieści się w zasięgu danego typu? Zobaczmy przykład:
1.Zadeklaruję zmienną typu double o nazwie liczba. Zmienna ta przechowuje liczby zmiennoprzecinkowe. Nadam jej wartość przekraczającą zasięg dla typu int (-2147483648 do 2147483647).

using System;
class Program {
    static void Main() {
        double liczba = 2147483648.8;
    }
}

2.Następnie zadeklaruję zmienną o typie int i nazwie liczba2. Dokonam jawnego przekształcenia typu double na typ int za pomocą operatora konwersji.

using System;
class Program {
    static void Main() {
        double liczba = 2147483648.8;
        int liczba2 = (int)liczba;
    }
}

3.Ostatnim krokiem będzie wyświetlenie wyniku na ekranie

using System;
class Program {
    static void Main() {
        double liczba = 2147483648.8;
        int liczba2 = (int)liczba;
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Oto rezultat działania naszej aplikacji:

klasa System.Convert

Rys. Wyświetlenie na ekranie wartości zmiennej o nazwie liczba2

Wynik, który został wyświetlony to minimalna wartość dla typu int. Niestety podczas przekształcenia wartość zmiennej typu double nie zmieściła się w zakresie typu int. Kompilator nie zgłosił żadnego błędu. W niektórych przypadkach taka utrata danych może być niedopuszczalna. Aby tego uniknąć możemy zastosować konwersję używając klasy System.Convert. Klasa ta w takim przypadku zwróci nam błąd.

Spróbujmy wykorzystać klasę System.Convert to tego przekształcenia:

using System;
class Program {
    static void Main() {
        double liczba = 2147483648.3;
        int liczba2 = Convert.ToInt16(liczba);// przekształcenie typów za pomocą klasy System.Convert
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Podczas próby kompilacji zwrócony zostanie wyjątek:

klasa System.Convert

Rys. Wyjątek zwrócony podczas próby przekształcenia typu.

Dzięki temu, że aplikacja zwróciła wyjątek wiemy, że następuje utrata danych w naszym algorytmie. Możemy teraz zareagować i poprawić algorytm poprzez zmianę typu z int na long i zastosowanie konwersji do typu int64 za pomocą klasy System.Convert, bądź poprzez obsłużenie wyjątku.
Przykładowy kod po poprawkach:

using System;
class Program {
    static void Main() {
        double liczba = 2147483648.3;
        long  liczba2 = Convert.ToInt64(liczba);
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Rezultat działania aplikacji:

klasa System.Convert

Rys. Wyświetlenie na ekranie wartości zmiennej o nazwie liczba2

Jak widzimy została dokonana konwersja.
Oczywiście, gdy już wiemy, że liczba nie zmieściła się nam w zakresie, możemy też zastosować operator konwersji dla zmienionego typu long z int.

using System;
class Program {
    static void Main() {
        double liczba = 2147483648.3;
        long  liczba2 = (long)liczba;
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Zaletą stosowania klasy System.Convert do konwersji jawnej typów liczbowych jest informacja o przekroczeniu zakresu danego typu. Informacji tej nie otrzymamy stosując operator konwersji.

Zaokrąglanie

Używając klasy System.Convert zamiast operatora konwersji zyskujemy większą dokładność danych podczas przekształcania liczb zmiennoprzecinkowych na całkowite. Metody w tej klasie zaokrąglają liczby. Zwiększa to dokładność wyniku, zobaczmy przykład:
Zacznijmy najpierw od przekształcenia od operatora konwersji:

using System;
class Program {
    static void Main() {
        double liczba = 10.8;
        int  liczba2 = (int)liczba;
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine(); 
    }
} 

Oto rezultat działania aplikacji:

klasa System.Convert

Rys. Wyświetlenie na ekranie wartości dla zmiennej o nazwie liczba2

Po wyświetleniu wyniku widzimy, że stosując operator konwersji liczba nie zostaje zaokrąglona w ten sposób tracimy dane.
Zastosujmy do przekształcenia typu double na typ int metodę z klasy System.Convert.

using System;
class Program {
    static void Main() {
        double liczba = 10.8;
        int liczba2 = Convert.ToInt16(liczba);
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Oto rezultat działania aplikacji:

klasa System.Convert

Rys. Wyświetlenie na ekranie wartości dla zmiennej o nazwie liczba2

Dzięki użyciu metody z klasy System.Convert uzyskaliśmy dokładniejsze dane. Liczba dostała zaokrąglona z 10.8 do 11. W przypadku użycia operatora konwersji liczba nie zostanie zaokrąglona i utrata informacji będzie większa.

Konwersja typów

Nie wszystkie typy możemy przekształcać za pomocą operatora konwersji. Wykorzystujemy wtedy klasę System.Convert.
Zobaczmy przykład:
Spróbujmy przekształcić typ string na int za pomocą operatora konwersji:

using System;
class Program {
    static void Main() {
        string liczba = "10";
        int liczba2 = (int)liczba;
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Kompilator zgłasza błąd:

klasa System.Convert

Rys. Błąd zgłoszony przez kompilator

Nie możemy za pomocą operatora konwersji zmienić typu string na int.
Zastosujmy metodę z klasy System.Convert


using System;
class Program {
    static void Main() {
        string liczba = "10";
        int liczba2 = Convert.ToInt16(liczba);
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Rezultat działania aplikacji:

klasa System.Convert

Rys. Wyświetlenie na ekranie wartości dla zmiennej o nazwie liczba2

Dzięki klasie System.Convert przekształcenie typów się udało. Należy jednak pamiętać, że stosując tą metodę musimy wiedzieć na jaki typ przekształcamy typ string. Metoda ta zwróci wyjątek jeżeli będziemy próbować z typu string o wartości zmiennoprzecinkowej zmienić na typ int. Zobaczmy przykład:

using System;
class Program {
    static void Main() {
        string liczba = "10.1";
        int liczba2 = Convert.ToInt16(liczba);
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = " + liczba2);
        Console.ReadLine();
    }
}

Kompilator zwróci wyjątek:

klasa System.Convert

Rys. Wyjątek zwrócony przez kompilator

Polecam zapoznać się z klasą System.Convert, dzięki niej możemy przekształcać typy wbudowane.