【C# .NET 8】switch文でオブジェクトの型を判別する方法【パターンマッチング解説】
2025年7月23日
C#でオブジェクトの型を判定したいとき、is 演算子だけではなく、switch文を使った「パターンマッチング」がとても便利です。特に、C# 8以降(.NET Core 3.0~)では、型によって処理を分岐するコードが非常にシンプルに書けるようになりました。
この記事では、.NET 8対応のC#コードで、switch文を使って型を判別する方法を初心者にもわかりやすく解説します。
🔍 本記事の対象読者
- C#で
switch文を使って型ごとに処理を分けたい方 - パターンマッチングの実例を知りたい方
- .NET 8の新機能を活かしたコードを書きたい方
✅ C#でswitch文を使った型判定の基本
以下のように、C# 8以降では switch(obj) 文で型による分岐ができます。
object obj1 = "Hello, world!";
switch (obj1)
{
case string s:
Console.WriteLine($"string型: {s}");
break;
case int i:
Console.WriteLine($"int型: {i}");
break;
case null:
Console.WriteLine("nullです");
break;
case object o:
Console.WriteLine($"その他のobject型: {o.GetType().Name}");
break;
}
📌 ポイント解説
case string s::obj1がstring型の場合にマッチし、sにキャストされた値が入ります。case int i::obj1がint型の場合。case null::nullチェックも可能です。case object o::上記以外のオブジェクト型全般にマッチ。
⚠ 注意:
case object:を上の方に書いてしまうと、それより下の分岐がすべて無視されてしまいます。必ず最後に書くようにしましょう。
🧠 C# 9以降は「switch式」でもっと簡潔に書ける
string result = obj1 switch
{
string s => $"string型: {s}",
int i => $"int型: {i}",
null => "nullです",
object o => $"その他: {o.GetType().Name}"
};
Console.WriteLine(result);
このように、switch 式ではより簡潔に型による分岐処理を行うことができます。複数の型ごとに異なる文字列を返したい場合に最適です。
📝 条件付き分岐も可能:when句の活用
型だけでなく、追加条件を加えて分岐させることもできます。
switch (obj1)
{
case string s when s.Length > 10:
Console.WriteLine("長めの文字列です");
break;
case string s:
Console.WriteLine("短めの文字列です");
break;
}
🔚 まとめ:C#のswitch文で柔軟な型判定をしよう
C#のswitch文は、C# 8以降のパターンマッチング機能により、オブジェクトの型によって柔軟な分岐処理が可能になりました。これにより、型チェックとキャストを同時にシンプルに記述できます。
✨ 本記事のおさらい
switch文で型による分岐ができる(C# 8~)case string s:やcase int i:のように型指定が可能switch式を使えば、より短く書ける(C# 9~)when句で追加条件の分岐もできる
C#のswitchを使いこなすことで、型による分岐処理が簡潔に書けるようになります。コードがスッキリし、メンテナンス性も向上します。
📚 関連リンク
WinUI 3 / XAML の Grid.Width 設定方法
WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】
MenuFlyout は WinUI 3 で便利なポップアップメニュー
WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い
PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術
Microsoft Storeアプリ更新時のロールアウト設定まとめ
PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Microsoft Authenticatorのオートフィル機能が2025年7月に終了
RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて
PowerShellでGrapheme Clusterについて処理を考える
業務用ノートパソコンのストレージは暗号化されている?BitLockerの確認と対策方法
【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法
【C# .NET 8 対応】List<string> を重複なしでマージする方法|
【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き
【C# .NET 8】ファイルから重複行を削除する2つの方法|Distinct vs HashSet
WinUI 3 ComboBoxの自作クラスバインドと選択イベント検出方法
System.Text.Json 9.0.0.0 で FileNotFoundException
C#で改行・カンマ入りのCSVを正しく読み込む方法【.NET8対応】
C#/.NET 8でDateTimeを日本時間でISO 8601形式に変換する方法