c#の「タイプによるスイッチング」をサポートしていない言語では、プログラマーは通常、クラシック「if ... else ... else ... else」構造を使用してタイプベースのスイッチングをシミュレートします。ただし、タイプの数が増えると、この方法は長く壊れやすくなります。
c#7およびより高いバージョンモードマッチ たとえば:c#6 nameof()
を使用しますc#6では、nameof()コンピューティングシンボルを使用して、スイッチステートメントのタイプ名を動的に取得できます。パターンほど単純ではありませんが、ハードコーディングタイプ名を避けるために、より簡単な - 再構築の代替品を提供します。
c#5および以前のバージョンベースのスイッチング
void Foo(object o) { switch (o) { case A a: // 匹配A类型 a.Hop(); break; case B b: // 匹配B类型 b.Skip(); break; default: throw new ArgumentException("意外类型: " + o.GetType()); } }
C#5および以前のバージョンの場合、ハードコーディングタイプ名を持つ基本的な「if ... else ... else ... else ... else ... else」構造を使用する以外に選択肢はありません。この方法は厄介で間違いを犯すのが簡単になるかもしれません。
<论>結論void Foo(object o) { switch (o.GetType().Name) { case nameof(A): // 处理A类型 break; case nameof(B): // 处理B类型 break; default: // 处理其他类型 break; } }
以上がパターンは、C#の従来のタイプベースのスイッチングに代わる優れた代替品ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。