c# 's'スイッチオンタイプ '
の制限を超えてc#は「タイプオン」ステートメントを直接サポートしていません。この制限は、型階層の固有のあいまいさから生じます。オブジェクトは、複数のケースと一致する可能性があります。 ただし、タイプに依存するロジックを実現するために、いくつかのエレガントな回避策が存在します
パターンマッチングのレバレッジ(C#7以降)ステートメント内でタイプベースのロジックを処理するための簡潔で読みやすい方法を提供します。 例を遵守してください:
switch
タイプ名ベースのスイッチング(C#6以降)c#6以降のバージョンは
<code class="language-csharp">switch (shape) { case Circle c: Console.WriteLine($"Circle with radius {c.Radius}"); break; case Rectangle s when (s.Length == s.Height): Console.WriteLine($"{s.Length} x {s.Height} square"); break; case Rectangle r: Console.WriteLine($"{r.Length} x {r.Height} rectangle"); break; // ... more cases }</code>
文字列ベースのスイッチング(C#5以前)
nameof()
<code class="language-csharp">switch (o.GetType().Name) { case nameof(AType): // Handle AType break; case nameof(BType): // Handle BType break; }</code>
これらの方法は「タイプのスイッチ」を効果的に模倣しますが、専用の言語機能と同じレベルの優雅さや保守性を常に提供するとは限りません。 選択は、C#バージョンとコードの明確さの目的のレベルに依存します。
以上が直接「スイッチオンタイプ」機能なしでC#にタイプ依存ロジックを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。