データ型の変換
Tip
詳細については、「 テキストと画像 」タブを参照してください。
C# は厳密に型指定されているため、あるデータ型から別のデータ型に値を明示的に変換する必要がある場合があります。 ユーザーが数値を入力した場合でも、 Console.ReadLine() は常にテキスト ( string) を返すので、これはユーザー入力を操作する場合に特に重要です。
変換が重要な理由
この一般的なシナリオを考えてみましょう。
Console.Write("Enter your age: ");
string ageInput = Console.ReadLine();
int nextYear = ageInput + 1; // ERROR! Can't add int to string
ユーザー入力で数学を行うには、最初に文字列を数値に変換する必要があります。
変換メソッド
C# には、データ型間で値を変更するための Convert メソッドが用意されています。
| Method | に変換します | Example | Result |
|---|---|---|---|
Convert.ToInt32() |
int | Convert.ToInt32("42") |
42 |
Convert.ToDecimal() |
10 進 | Convert.ToDecimal("19.99") |
19.99m |
Convert.ToDouble() |
double | Convert.ToDouble("3.14") |
3.14 |
Convert.ToString() |
文字列 | Convert.ToString(42) |
"42" |
前のシナリオを修正する方法を次に示します。
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}");
このコードは、 C# コード エディターで自分で実行してみてください。
解析メソッド
文字列を数値に変換するもう 1 つの方法は、 Parse メソッドを使用することです。
int age = int.Parse("25");
decimal price = decimal.Parse("19.99");
double average = double.Parse("87.5");
Convert.ToInt32()もint.Parse()も同様のことを行います。好きなスタイルを使用します。
数値型間のキャスト
数値型 ( decimal から int など) 間で変換するには、ターゲット型をかっこで囲んで キャスト を使用します。
decimal price = 19.99m;
int wholePrice = (int)price; // Casts to int: 19 (decimal dropped)
Console.WriteLine(wholePrice); // Output: 19
除算中に 10 進精度を維持するようにキャストすることもできます。
int first = 7;
int second = 2;
decimal result = (decimal)first / (decimal)second;
Console.WriteLine(result); // Output: 3.5
無効な変換の場合はどうなりますか?
数値として解釈できない値を変換しようとすると、C# はエラーをスローします。
int number = Convert.ToInt32("hello"); // ERROR: Input string was not in a correct format
ここでは、試す前に値を変換できることを確認してください。 後で、エラーを適切に処理する方法について説明します。