Podczas pisania aplikacji w języku C# programista wielokrotnie spotyka się z problemem niekompatybilności zmiennych. Problem ten występuje w wielu językach i polega na nieodpowiednim użyciu zmiennej, lub też, pewnej synchronizacji typów zmiennych. Wyobraź sobie zmienną numeryczną wiek, zadeklarowaną jako int. Niech zmienna ta ma wartość 18. Jednak w przypadku, gdy zajdzie konieczność wyświetlenia jej wartości w komponencie np. etykiety (label) lub innej, kompilator prawdopodobnie wyświetli błąd: Cannot implicitly convert type int to string. Jest to spowodowane faktem, że komponenty operują na konkretnych typach danych – w przypadku label, właściwość text jest typu tekstowego, zaś przypisywana zmienna wiek jest liczbą. Niektóre komponenty podają wpisaną przez użytkownika wartość jako zmienną liczbową, inne jako tekstową i w takich przypadkach, jeśli zajdzie konieczność, należy dokonywać konwersji zmiennych.
Konwersja zmiennej numerycznej na tekstową jest bardzo prosta i odbywa się poprzez skorzystanie z metody klasy String: ToString(). Przykład: zmienna nasz_wynik ma typ numeryczny (w tym przypadku decimal). Aby przekonwertować ją do zmiennej tekstowej, napiszemy:
Convert decimal nasz_wynik = Argument1.Value + Argument2.Value; <- deklaracja wynik.Text = nasz_wynik.ToString(); <- konwertowanie i przypisanie do etykiety
W odwrotnym przypadku (konwersja tekstu na wartość numeryczną), ten sposób nie zadziała i należy posłużyć się klasą Convert, która służy do konwersji zmienych. Klasa Convert może również zastąpić wymienioną metodę konwersji.
Oto niektóre metody klasy Convert:
ToByte, ToChar, ToString, ToInt16, ToInt32, ToInt64, ToSingle, ToUint16, ToUInt32, ToUInt64, ToDecimal, ToBolean
Jeszcze lepszą metodą konwersji jest metoda bezpieczna, polegająca na wykorzystaniu metody TryParse, wywodząca się z klasy int, która zwróci wartość logiczną w przypadku sukcesu lub niepowodzenia. W ten sposób możemy zabezpieczyć program przed przypadkowym wpisaniem przez użytkownika nieprawidłowej wartości (np. tekstu zamiast liczby).
int i; if (!int.TryParse(textBox1.Text, out i)) MessageBox.Show("To nie jest zmienna numeryczna!");
Istnieje kilka metod konwertowania zmiennych i warto je po kolei przetestować. Tam, gdzie nie zachodzi potrzeba kontroli wartości, można skorzystać z Convert. Jeśli program musi pobierać wartości numeryczne w oknie TextBox, którego przeznaczeniem jest pobieranie tekstu, warto użyć TryParse, gdyż uchroni to program przed przypadkowym zawieszeniem.
Przykład: zmienna a jest typu znakowego i jej wartość to „10”, zaś zmienna b typu liczbowego int. Należy dodać wartości obu zmiennych i podstawić do zmiennej numerycznej wynik. Aby dodać do siebie obnie zmienne, należy dokonać konwersji zmiennej a do typu numerycznego, a następnie wynik dodawania podstawić do zmiennej wynik:
class Program { static void Main(string[] args) { String a="10"; int b = 10; int wynik = Convert.ToInt16(a) + b; Console.WriteLine("Wynik: " + wynik); Console.ReadKey(); } }