Day 6 のゴールと全体イメージ
Day 6 では、C# の「型変換」を集中的に学びます。 型変換は、ある型の値を別の型として扱いたいときに行う操作で、実用的なプログラムでは頻繁に登場します。
学ぶ項目は次のとおりです。
- 暗黙的変換
- 明示的変換
- キャスト
ConvertParseTryParse
これらを、初心者向けにかみ砕きながら、例題とコードを交えてステップバイステップで説明していきます。
型変換とは何か
「箱の種類を変える」イメージ
Day 2・Day 3 で、
int(整数)double(小数)string(文字列)
などの「型」を学びました。
型変換とは、
ある型の値を、別の型として扱えるようにすること
です。
例えば、
int→doubleに変換して小数として扱うstring→intに変換して数値計算に使う
といった場面で型変換が必要になります。
暗黙的変換(自動で行われる安全な変換)
コンパイラが「安全」と判断して自動で変換してくれる
暗黙的変換とは、プログラマが特別な記述をしなくても、コンパイラが自動で行ってくれる型変換のことです。
代表的な例は、
int→doublefloat→double
など、「情報が失われない方向」の変換です。
具体例:int から double への暗黙的変換
using System;
class Program
{
static void Main(string[] args)
{
int intValue = 10; // 整数型
double doubleValue = intValue; // 暗黙的に double に変換される
Console.WriteLine($"intValue(int):{intValue}");
Console.WriteLine($"doubleValue(double):{doubleValue}");
Console.ReadLine();
}
}
C#ここでのポイントは、
double doubleValue = intValue;のように、特別な記述なしで代入できていることintの値 10 が、そのままdoubleの 10.0 として扱われること
です。
暗黙的変換は、「情報が増える方向」や「安全な方向」の変換に限られるという点が重要です。
明示的変換(キャスト)
プログラマが「変換したい」と明示する
明示的変換とは、プログラマが「この型に変換したい」と明示的に指定する型変換のことです。 C# では、キャスト演算子 (<型名>) を使って行います。
代表的な例は、
double→intlong→int
など、「情報が失われる可能性がある」変換です。
具体例:double から int へのキャスト
using System;
class Program
{
static void Main(string[] args)
{
double doubleValue = 10.8; // 小数を含む値
int intValue = (int)doubleValue; // 明示的に int にキャスト(小数点以下は切り捨て)
Console.WriteLine($"doubleValue(double):{doubleValue}");
Console.WriteLine($"intValue(int):{intValue}");
Console.ReadLine();
}
}
C#ここでの重要ポイントは、
(int)doubleValueのように、キャスト演算子を使って明示的に変換していること- 小数点以下が切り捨てられるため、
10.8→10になること - 情報が失われる可能性があるため、コンパイラが自動ではやってくれないこと
です。
初心者の方は、
「自動でできない変換は、キャストしているんだな」
という感覚を持っておくと理解しやすいです。
Convert クラスによる型変換
Convert は「いろいろな型変換をまとめて提供するクラス」
Convert クラスは、
Convert.ToInt32()Convert.ToDouble()Convert.ToString()
など、さまざまな型変換メソッドを提供しています。
具体例:string → int、int → string
using System;
class Program
{
static void Main(string[] args)
{
// string → int
string numberText = "123";
int number = Convert.ToInt32(numberText); // "123" → 123
// int → string
int age = 30;
string ageText = Convert.ToString(age); // 30 → "30"
Console.WriteLine($"numberText(string):{numberText}");
Console.WriteLine($"number(int):{number}");
Console.WriteLine($"age(int):{age}");
Console.WriteLine($"ageText(string):{ageText}");
Console.ReadLine();
}
}
C#ここでのポイントは、
Convert.ToInt32()やConvert.ToString()のように、メソッド名で「変換先の型」が分かりやすいことConvertは、nullや一部の特殊な値に対しても比較的安全に動作すること
です。
ただし、Convert.ToInt32("abc") のように「数字でない文字列」を変換しようとすると、 FormatException が発生する点には注意が必要です。
Parse と TryParse(文字列 → 数値)
Parse:前提が正しければ便利だが、エラーに弱い
Parse は、
int.Parse()double.Parse()decimal.Parse()
など、「文字列を特定の型に変換する」ためのメソッドです。
using System;
class Program
{
static void Main(string[] args)
{
string numberText = "123";
int number = int.Parse(numberText); // "123" → 123
Console.WriteLine($"numberText(string):{numberText}");
Console.WriteLine($"number(int):{number}");
Console.ReadLine();
}
}
C#ここでのポイントは、
- 入力が「数字だけの文字列」である前提なら、
Parseはシンプルで使いやすいこと - しかし、数字以外が含まれていると
FormatExceptionが発生してプログラムが止まること
です。
TryParse:安全に変換できるかどうかを確認する
TryParse は、
「変換できるかどうか」を
boolで返し、成功したときだけ変換結果を出力引数に入れる
という、安全な型変換メソッドです。
基本形は次のようになります。
bool result = int.TryParse(文字列, out 変換後の値);
C#具体例を見てみます。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("数字を入力してください:");
string input = Console.ReadLine();
bool isParsed = int.TryParse(input, out int number);
if (isParsed)
{
Console.WriteLine($"変換に成功しました。number = {number}");
}
else
{
Console.WriteLine("変換に失敗しました。数字だけを入力してください。");
}
Console.ReadLine();
}
}
C#ここでの重要ポイントは、
TryParseは変換に失敗しても例外を出さず、falseを返すだけであること- ユーザー入力など「何が入ってくるか分からない」場面で非常に有用であること
outで受け取る変数は、成功したときだけ有効な値を持つこと
です。
暗黙的変換・明示的変換・Convert・Parse・TryParse の違いを整理する
それぞれの役割を一言でまとめる
ここまで学んだ型変換を、役割ごとに整理してみます。
- 暗黙的変換
- コンパイラが自動で行う安全な変換
- 例:
int→double
- 明示的変換(キャスト)
- プログラマが「この型に変換したい」と指定する変換
- 情報が失われる可能性あり
- 例:
double→int
- Convert
- さまざまな型変換を提供するクラス
Convert.ToInt32(),Convert.ToString()など
- Parse
- 「正しい形式の文字列」を特定の型に変換するメソッド
- 入力が正しい前提ならシンプルで便利
- 例:
int.Parse("123")
- TryParse
- 「変換できるかどうか」を確認しながら安全に変換するメソッド
- ユーザー入力などに向いている
- 例:
int.TryParse(input, out number)
初心者の方にとっては、
「ユーザー入力 → TryParse」 「コード内の確実な値 → Parse や Convert」 「数値型どうし → 暗黙的変換 or キャスト」
という使い分けを意識すると、整理しやすくなります。
型変換の総合例:商品価格入力+税込計算
Day 6 の内容をまとめて使う
最後に、Day 6 の型変換をまとめて使った例として、 コンソールから商品価格を入力してもらい、税込価格を計算するプログラムを書いてみます。
using System;
class Program
{
static void Main(string[] args)
{
// 消費税率(double → decimal への明示的変換の例)
double taxRateDouble = 0.10; // double 型の税率
decimal taxRate = (decimal)taxRateDouble; // 明示的に decimal にキャスト
decimal price;
while (true)
{
Console.WriteLine("商品の税抜価格を入力してください(数字のみ):");
string priceText = Console.ReadLine(); // 文字列入力
// TryParse を使って安全に decimal に変換
bool isParsed = decimal.TryParse(priceText, out price);
if (isParsed)
{
break; // 正しく変換できたらループを抜ける
}
Console.WriteLine("入力エラー:価格は数字で入力してください。");
}
// 税額と税込価格を計算(decimal 型で計算)
decimal tax = price * taxRate;
decimal priceWithTax = price + tax;
// Convert を使って文字列に変換して表示する例
string priceWithTaxText = Convert.ToString(priceWithTax);
Console.WriteLine();
Console.WriteLine("=== 価格計算結果 ===");
Console.WriteLine($"税抜価格:{price} 円");
Console.WriteLine($"消費税率:{taxRate * 100} %");
Console.WriteLine($"消費税額:{tax} 円");
Console.WriteLine($"税込価格:{priceWithTax} 円");
Console.WriteLine($"税込価格(文字列):{priceWithTaxText}");
Console.ReadLine();
}
}
C#このコードの中には、
- 明示的変換(キャスト):
(decimal)taxRateDouble Console.ReadLine():文字列入力decimal.TryParse():安全な数値変換Convert.ToString():数値 → 文字列変換- 暗黙的変換:
taxRate * 100などの数値計算
といった Day 6 の要素がバランスよく含まれています。
Day 6 のまとめ
Day 6 では、C# の型変換として、
- 暗黙的変換 → コンパイラが自動で行う安全な変換
- 明示的変換(キャスト) → プログラマが指定する変換(情報が失われる可能性あり)
Convert→ さまざまな型変換メソッドを提供するクラスParse→ 正しい形式の文字列を特定の型に変換するメソッドTryParse→ 変換できるかどうかを確認しながら安全に変換するメソッド
を、具体的なコードとともに確認しました。
型変換は、
- ユーザー入力を数値に変換して計算する
- 数値を文字列に変換して画面に表示する
- 異なる数値型どうしで計算する
など、実用的なプログラムで必ず必要になる考え方です。
ぜひ、
int↔double↔decimalの変換を試してみるstringからintやdecimalへの変換を、ParseとTryParseで比較してみるConvertを使って、さまざまな型どうしの変換を試してみる
といった練習を通して、「値の型を意識しながら、必要に応じて変換する」感覚を育てていってください。
Day 6 練習のゴール
この練習では、次の 3 つの型変換を題材にして、Day 6 の内容を体で覚えていきます。
- 文字列 → 数値
- 数値 → 文字列
double→int
そして、その中で自然に、
- 暗黙的変換
- 明示的変換(キャスト)
ConvertParseTryParse
を使い分ける感覚を身につけることを目指します。
文字列 → 数値:ユーザー入力を「計算できる値」にする
ステップ1:文字列として入力を受け取る
まずは、コンソールから「年齢」を文字列として入力してもらいます。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("年齢を入力してください(数字のみ):");
// Console.ReadLine() は必ず文字列(string)を返します
string ageText = Console.ReadLine(); // 例:"30"
Console.WriteLine($"入力された年齢(文字列):{ageText}");
Console.ReadLine();
}
}
C#ここではまだ「文字列」として扱っているだけなので、計算には使えません。 次のステップで「数値」に変換していきます。
ステップ2:Parse を使って文字列を int に変換する
入力が「確実に数字だけ」と分かっている場面では、int.Parse がシンプルです。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("年齢を入力してください(数字のみ):");
string ageText = Console.ReadLine(); // 例:"30"
// 文字列を int に変換します(Parse を使用)
int age = int.Parse(ageText); // "30" → 30
Console.WriteLine($"あなたは {age} 歳ですね。");
Console.ReadLine();
}
}
C#重要ポイント:
int.Parseは「数字だけの文字列」が前提です。"abc"や"30歳"のような文字列を渡すと、FormatExceptionが発生してプログラムが止まります。
ステップ3:TryParse で安全に変換する
ユーザー入力のように「何が入ってくるか分からない」場面では、TryParse を使う方が安全です。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("年齢を入力してください(数字のみ):");
string ageText = Console.ReadLine();
// TryParse を使って安全に変換を試みます
bool isParsed = int.TryParse(ageText, out int age);
if (isParsed)
{
Console.WriteLine($"あなたは {age} 歳ですね。");
}
else
{
Console.WriteLine("入力エラー:年齢は数字だけで入力してください。");
}
Console.ReadLine();
}
}
C#重要ポイント:
TryParseは「変換できたかどうか」をboolで返します。- 失敗しても例外は発生せず、
falseが返るだけです。 - ユーザー入力には TryParse が基本 と考えておくと安全です。
数値 → 文字列:画面表示やログ出力のための変換
ステップ1:数値を文字列に変換する基本パターン
数値を文字列に変換する方法はいくつかありますが、代表的なのは次の 2 つです。
ToString()メソッドConvert.ToString()
using System;
class Program
{
static void Main(string[] args)
{
int age = 30; // 数値としての年齢
string ageText1 = age.ToString(); // int → string
string ageText2 = Convert.ToString(age); // int → string(Convert を使用)
Console.WriteLine($"age(int):{age}");
Console.WriteLine($"ageText1(string):{ageText1}");
Console.WriteLine($"ageText2(string):{ageText2}");
Console.ReadLine();
}
}
C#重要ポイント:
ToString()はほとんどの型が持っているメソッドで、シンプルに使えます。Convert.ToString()は、nullを扱う場面などで少し柔軟ですが、基本的な用途ではToString()で十分です。
ステップ2:数値を文字列にしてメッセージを組み立てる
数値 → 文字列変換は、画面表示やログ出力でよく使われます。
using System;
class Program
{
static void Main(string[] args)
{
int price = 1200;
int quantity = 3;
int total = price * quantity;
// 数値を文字列にしてメッセージを組み立てる
string message = "合計金額は " + total.ToString() + " 円です。";
Console.WriteLine(message);
Console.ReadLine();
}
}
C#もちろん、文字列補間($"...")を使えば、さらに読みやすく書けます。
string message = $"合計金額は {total} 円です。";
C#double → int:明示的変換(キャスト)の練習
ステップ1:double の値を用意する
まずは、小数を含む double の値を用意します。
using System;
class Program
{
static void Main(string[] args)
{
double score = 89.7; // テストの点数(小数あり)
Console.WriteLine($"score(double):{score}");
Console.ReadLine();
}
}
C#ステップ2:キャストで double → int に変換する
double から int への変換は、明示的変換(キャスト) が必要です。
using System;
class Program
{
static void Main(string[] args)
{
double score = 89.7;
// 明示的に int にキャスト(小数点以下は切り捨て)
int scoreInt = (int)score;
Console.WriteLine($"score(double):{score}");
Console.WriteLine($"scoreInt(int):{scoreInt}");
Console.ReadLine();
}
}
C#重要ポイント:
(int)scoreのように、キャスト演算子を使って「この型に変換したい」と明示します。- 小数点以下は切り捨てられるため、
89.7→89になります。 - 情報が失われる可能性があるため、コンパイラは自動では変換してくれません(暗黙的変換は行われない)。
ステップ3:暗黙的変換との違いを意識する
暗黙的変換の例として、int → double を見てみます。
using System;
class Program
{
static void Main(string[] args)
{
int intValue = 10;
double doubleValue = intValue; // 暗黙的変換:int → double
Console.WriteLine($"intValue(int):{intValue}");
Console.WriteLine($"doubleValue(double):{doubleValue}");
Console.ReadLine();
}
}
C#暗黙的変換と明示的変換の違い:
- 暗黙的変換
- コンパイラが自動で行う
- 情報が失われない方向(例:
int→double)
- 明示的変換(キャスト)
- プログラマが指定して行う
- 情報が失われる可能性がある方向(例:
double→int)
この違いを意識しておくと、「どこでキャストが必要か」が見えてきます。
練習の総合例:入力 → 数値変換 → 計算 → 表示
文字列 → 数値 → 計算 → 文字列 の一連の流れを作る
最後に、Day 6 練習の要素をまとめた小さなプログラムを示します。
using System;
class Program
{
static void Main(string[] args)
{
// 1. 文字列として入力を受け取る
Console.WriteLine("商品の価格を入力してください(数字のみ):");
string priceText = Console.ReadLine();
// 2. TryParse で安全に数値(int)に変換する
bool isParsed = int.TryParse(priceText, out int price);
if (!isParsed)
{
Console.WriteLine("入力エラー:価格は数字だけで入力してください。");
Console.ReadLine();
return;
}
// 3. 割引率(double)を用意して、int にキャストしてみる
double discountRate = 0.1; // 10% 割引
double discountedPriceDouble = price * (1 - discountRate); // double で計算
int discountedPriceInt = (int)discountedPriceDouble; // int にキャスト(切り捨て)
// 4. 数値を文字列に変換してメッセージを組み立てる
string originalText = price.ToString();
string discountedText = discountedPriceInt.ToString();
Console.WriteLine();
Console.WriteLine("=== 価格計算結果 ===");
Console.WriteLine($"元の価格:{originalText} 円");
Console.WriteLine($"割引後の価格(概算):{discountedText} 円");
Console.ReadLine();
}
}
C#このコードの中には、
- 文字列 → 数値:
int.TryParse - 数値 → 文字列:
ToString() double→int:キャスト(int)- 暗黙的変換:
price * (1 - discountRate)の計算でint→double
といった Day 6 の練習項目がすべて含まれています。
Day 6 練習のまとめ
この練習では、
- 文字列 → 数値
Parse:前提が正しければシンプルTryParse:ユーザー入力などに向いた安全な変換
- 数値 → 文字列
ToStringやConvert.ToStringで画面表示用の文字列にする
- double → int
- キャスト
(int)による明示的変換 - 暗黙的変換との違いを意識する
- キャスト
という流れを、具体的なコードとともに確認しました。
型変換は、「値の型を意識して扱う」ための大事なスキルです。 ぜひ、
- 自分で値を変えながら、変換結果の違いを確認する
ParseとTryParseの挙動を比較してみるdouble→intのキャストで「どこまで切り捨てられるか」を試してみる
といった練習を通して、「必要なときに、適切な方法で型を変える」感覚を育てていってください。
