Konwersja typów to konwertowanie jednego typu danych na inny typ danych. Pojęcie to w języku angielskim to Type Casting.
W języku C# istnieją dwa rodzaje konwersji:
  • konwersja niejawna (Implicit type conversion) – ten rodzaj konwersji jest dokonywany w bezpieczny sposób. Oznacza to, że dokonujemy konwersji, np. mniejszego na większy typ danych czy konwersji klasy pochodnej na klasę bazową;
  • konwersja jawna (Explicit type conversion) – konwersje takie wykonywane są bezpośrednio przez użytkowników za pomocą wcześniej zdefiniowanych metod. Jawne konwersje wymagają zastosowania operatora rzutowania.
Poniżej przykład niejawnej konwersji typów:
using System;
namespace KonwersjaTypow
{
    class NieJawnaKonwersja
    {
        static void Main(string[] args)
        {
            int wartosc1 = 0;
            byte wartosc2 = 15;
            // Wymuszona konwersja, dokonywana automatycznie przez kompilator
            // Przypisanie wartości byte do wartości int
            wartosc1 = wartosc2;
            // Kolejny przykład, dodajemy dwie liczby: całkowitą i zmiennoprzecinkową
            // Wynik to wartość zmiennoprzecinkowa
            Console.WriteLine(34 + 34.5);
        }
    }
}
Poniżej przykład jawnej konwersji typów:
using System;
namespace KonwersjaTypow
{
    class JawnaKonwersja
    {
        static void Main(string[] args)
        {
            double liczba = 3765.47;
            int i;
            // Konwersja typu doble na int - użycie operatora rzutowania;
            i = (int)liczba;
            // Rezultat wywołania takiego programu to: 3765
            Console.WriteLine(i);
            Console.ReadKey();
        }
    }
}

Metody konwersji typów w C#

Poniższa tabela zawiera listę wbudowanych metod do konwersji typów:
Metoda Opis
ToBoolean konwersja typu na typ logiczny - w miarę możliwości
ToByte konwersja typu na bajt
ToChar konwersja typu do pojedynczego znaku tablicy Unicode - w miarę możliwości
ToDateTime konwersja typu (liczba całkowita lub łańcuch znaków) do typu DateTime (data i godzina)
ToDecimal konwersja liczby zmiennoprzecinkowej lub liczb całkowitej do typu dziesiętnego
ToDouble konwersja typu do typu double (64-bitowa liczba zmiennoprzecinkowa)
ToInt16 konwersja do 16-bitowej liczby całkowitej
ToInt32 konwersja do 32-bitowej liczby całkowitej
ToInt64 konwersja do 64-bitowej liczby całkowitej
ToSbyte konwersja do 8-bitowej liczb całkowitej
ToSingle konwersja do małej liczby zmiennoprzecinkowej
ToString konwersja typu do łańcucha tekstowego
ToType konwersja typu do określonego typu
ToUInt16 konwersja do 16-bitowej liczby całkowitej (bez możliwości przechowywania liczb ujemnych)
ToUInt32 konwersja do 32-bitowej liczby całkowitej (bez możliwości przechowywania liczb ujemnych)
ToUInt64 konwersja do 64-bitowej liczby całkowitej (bez możliwości przechowywania liczb ujemnych)
Konwersja różnych typów wartościowych do łańcucha tekstowego (string):
using System;
namespace KonwersjaTypow_WbudowaneMetody
{
    class KonwersjaDoString
    {
        static void Main(string[] args)
        {
            int i = 32;
            float f = 32.005f;
            double d = 1234.5678;
            bool b = false;
            // Wynik to: 32
            Console.WriteLine(i.ToString());
            // Wynik to: 32.005
            Console.WriteLine(f.ToString());
            // Wynik to: 1234.5678
            Console.WriteLine(d.ToString());
            // Wynik to: false
            Console.Write(b.ToString());
            // Wszystkie powyższe wartości (po konwersji) to wartości tekstowe
            Console.ReadKey();
        }
    }
}