基礎から学ぶC#入門 90日コース | C#基本文法 - Day 6:型変換

C# 90日で身につけるC#
スポンサーリンク
スポンサーリンク
  1. Day 6 のゴールと全体イメージ
  2. 型変換とは何か
    1. 「箱の種類を変える」イメージ
  3. 暗黙的変換(自動で行われる安全な変換)
    1. コンパイラが「安全」と判断して自動で変換してくれる
    2. 具体例:int から double への暗黙的変換
  4. 明示的変換(キャスト)
    1. プログラマが「変換したい」と明示する
    2. 具体例:double から int へのキャスト
  5. Convert クラスによる型変換
    1. Convert は「いろいろな型変換をまとめて提供するクラス」
    2. 具体例:string → int、int → string
  6. Parse と TryParse(文字列 → 数値)
    1. Parse:前提が正しければ便利だが、エラーに弱い
    2. TryParse:安全に変換できるかどうかを確認する
  7. 暗黙的変換・明示的変換・Convert・Parse・TryParse の違いを整理する
    1. それぞれの役割を一言でまとめる
  8. 型変換の総合例:商品価格入力+税込計算
    1. Day 6 の内容をまとめて使う
  9. Day 6 のまとめ
  10. Day 6 練習のゴール
  11. 文字列 → 数値:ユーザー入力を「計算できる値」にする
    1. ステップ1:文字列として入力を受け取る
    2. ステップ2:Parse を使って文字列を int に変換する
    3. ステップ3:TryParse で安全に変換する
  12. 数値 → 文字列:画面表示やログ出力のための変換
    1. ステップ1:数値を文字列に変換する基本パターン
    2. ステップ2:数値を文字列にしてメッセージを組み立てる
  13. double → int:明示的変換(キャスト)の練習
    1. ステップ1:double の値を用意する
    2. ステップ2:キャストで double → int に変換する
    3. ステップ3:暗黙的変換との違いを意識する
  14. 練習の総合例:入力 → 数値変換 → 計算 → 表示
    1. 文字列 → 数値 → 計算 → 文字列 の一連の流れを作る
  15. Day 6 練習のまとめ

Day 6 のゴールと全体イメージ

Day 6 では、C# の「型変換」を集中的に学びます。 型変換は、ある型の値を別の型として扱いたいときに行う操作で、実用的なプログラムでは頻繁に登場します。

学ぶ項目は次のとおりです。

  • 暗黙的変換
  • 明示的変換
  • キャスト
  • Convert
  • Parse
  • TryParse

これらを、初心者向けにかみ砕きながら、例題とコードを交えてステップバイステップで説明していきます。

型変換とは何か

「箱の種類を変える」イメージ

Day 2・Day 3 で、

  • int(整数)
  • double(小数)
  • string(文字列)

などの「型」を学びました。

型変換とは、

ある型の値を、別の型として扱えるようにすること

です。

例えば、

  • intdouble に変換して小数として扱う
  • stringint に変換して数値計算に使う

といった場面で型変換が必要になります。

暗黙的変換(自動で行われる安全な変換)

コンパイラが「安全」と判断して自動で変換してくれる

暗黙的変換とは、プログラマが特別な記述をしなくても、コンパイラが自動で行ってくれる型変換のことです。

代表的な例は、

  • intdouble
  • floatdouble

など、「情報が失われない方向」の変換です。

具体例: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# では、キャスト演算子 (<型名>) を使って行います。

代表的な例は、

  • doubleint
  • longint

など、「情報が失われる可能性がある」変換です。

具体例: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.810 になること
  • 情報が失われる可能性があるため、コンパイラが自動ではやってくれないこと

です。

初心者の方は、

「自動でできない変換は、キャストしているんだな」

という感覚を持っておくと理解しやすいです。

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 の違いを整理する

それぞれの役割を一言でまとめる

ここまで学んだ型変換を、役割ごとに整理してみます。

  • 暗黙的変換
    • コンパイラが自動で行う安全な変換
    • 例:intdouble
  • 明示的変換(キャスト)
    • プログラマが「この型に変換したい」と指定する変換
    • 情報が失われる可能性あり
    • 例:doubleint
  • 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 → 変換できるかどうかを確認しながら安全に変換するメソッド

を、具体的なコードとともに確認しました。

型変換は、

  • ユーザー入力を数値に変換して計算する
  • 数値を文字列に変換して画面に表示する
  • 異なる数値型どうしで計算する

など、実用的なプログラムで必ず必要になる考え方です。

ぜひ、

  • intdoubledecimal の変換を試してみる
  • string から intdecimal への変換を、ParseTryParse で比較してみる
  • Convert を使って、さまざまな型どうしの変換を試してみる

といった練習を通して、「値の型を意識しながら、必要に応じて変換する」感覚を育てていってください。


Day 6 練習のゴール

この練習では、次の 3 つの型変換を題材にして、Day 6 の内容を体で覚えていきます。

  • 文字列 → 数値
  • 数値 → 文字列
  • doubleint

そして、その中で自然に、

  • 暗黙的変換
  • 明示的変換(キャスト)
  • Convert
  • Parse
  • TryParse

を使い分ける感覚を身につけることを目指します。

文字列 → 数値:ユーザー入力を「計算できる値」にする

ステップ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 つです。

  1. ToString() メソッド
  2. 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.789 になります。
  • 情報が失われる可能性があるため、コンパイラは自動では変換してくれません(暗黙的変換は行われない)。

ステップ3:暗黙的変換との違いを意識する

暗黙的変換の例として、intdouble を見てみます。

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#

暗黙的変換と明示的変換の違い:

  • 暗黙的変換
    • コンパイラが自動で行う
    • 情報が失われない方向(例:intdouble
  • 明示的変換(キャスト)
    • プログラマが指定して行う
    • 情報が失われる可能性がある方向(例:doubleint

この違いを意識しておくと、「どこでキャストが必要か」が見えてきます。

練習の総合例:入力 → 数値変換 → 計算 → 表示

文字列 → 数値 → 計算 → 文字列 の一連の流れを作る

最後に、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()
  • doubleint:キャスト (int)
  • 暗黙的変換:price * (1 - discountRate) の計算で intdouble

といった Day 6 の練習項目がすべて含まれています。

Day 6 練習のまとめ

この練習では、

  • 文字列 → 数値
    • Parse:前提が正しければシンプル
    • TryParse:ユーザー入力などに向いた安全な変換
  • 数値 → 文字列
    • ToStringConvert.ToString で画面表示用の文字列にする
  • double → int
    • キャスト (int) による明示的変換
    • 暗黙的変換との違いを意識する

という流れを、具体的なコードとともに確認しました。

型変換は、「値の型を意識して扱う」ための大事なスキルです。 ぜひ、

  • 自分で値を変えながら、変換結果の違いを確認する
  • ParseTryParse の挙動を比較してみる
  • doubleint のキャストで「どこまで切り捨てられるか」を試してみる

といった練習を通して、「必要なときに、適切な方法で型を変える」感覚を育てていってください。

タイトルとURLをコピーしました