Konwertowanie typów danych
Wskazówka
Aby uzyskać więcej szczegółów, zobacz kartę Tekst i obrazy .
Ponieważ język C# jest silnie typizowany, czasami trzeba jawnie przekonwertować wartość z jednego typu danych na inny. Jest to szczególnie ważne podczas pracy z danymi wejściowymi użytkownika, ponieważ Console.ReadLine() zawsze zwraca tekst (a string) — nawet wtedy, gdy użytkownik wpisze liczbę.
Dlaczego konwersja ma znaczenie
Rozważmy ten typowy scenariusz:
Console.Write("Enter your age: ");
string ageInput = Console.ReadLine();
int nextYear = ageInput + 1; // ERROR! Can't add int to string
Aby wykonać obliczenia matematyczne z danymi wejściowymi użytkownika, musisz najpierw przekonwertować ciąg na liczbę.
Konwertowanie metod
Język C# udostępnia Convert metody zmiany wartości między typami danych:
| Metoda | Konwertuje na | Example | Wynik |
|---|---|---|---|
Convert.ToInt32() |
int | Convert.ToInt32("42") |
42 |
Convert.ToDecimal() |
liczba dziesiętna | Convert.ToDecimal("19.99") |
19.99m |
Convert.ToDouble() |
double | Convert.ToDouble("3.14") |
3.14 |
Convert.ToString() |
ciąg | Convert.ToString(42) |
"42" |
Poniżej przedstawiono sposób naprawy wcześniejszego scenariusza:
Console.Write("Enter your age: ");
string ageInput = Console.ReadLine();
int age = Convert.ToInt32(ageInput);
int nextYear = age + 1;
Console.WriteLine($"Next year you'll be {nextYear}");
Możesz spróbować uruchomić ten kod samodzielnie w edytorze kodu języka C#.
Analizowanie metod
Innym sposobem konwertowania ciągów na liczby jest użycie metod Parse:
int age = int.Parse("25");
decimal price = decimal.Parse("19.99");
double average = double.Parse("87.5");
Zarówno Convert.ToInt32(), jak i int.Parse() działają podobnie — użyj stylu, który wolisz.
Rzutowanie między typami liczbowymi
Aby konwertować między typami liczbowymi (na przykład z decimal do int), użyj rzutowania, umieszczając typ docelowy w nawiasach:
decimal price = 19.99m;
int wholePrice = (int)price; // Casts to int: 19 (decimal dropped)
Console.WriteLine(wholePrice); // Output: 19
Można również użyć rzutowania, aby zachować dokładność dziesiętną podczas dzielenia:
int first = 7;
int second = 2;
decimal result = (decimal)first / (decimal)second;
Console.WriteLine(result); // Output: 3.5
Co się dzieje z nieprawidłowymi konwersjami?
Jeśli spróbujesz przekonwertować wartość, której nie można zinterpretować jako liczby, język C# zgłasza błąd:
int number = Convert.ToInt32("hello"); // ERROR: Input string was not in a correct format
Na razie przed próbą upewnij się, że wartość można przekonwertować. Później dowiesz się, jak bezpiecznie obsługiwać błędy.