c#の「タイプによるスイッチング」をサポートしていない言語では、プログラマーは通常、クラシック「if ... else ... else ... else」構造を使用してタイプベースのスイッチングをシミュレートします。ただし、タイプの数が増えると、この方法は長く壊れやすくなります。
c#7およびより高いバージョンモードマッチ たとえば:c#6 nameof()
を使用しますc#6では、nameof()コンピューティングシンボルを使用して、スイッチステートメントのタイプ名を動的に取得できます。パターンほど単純ではありませんが、ハードコーディングタイプ名を避けるために、より簡単な - 再構築の代替品を提供します。
c#5および以前のバージョンベースのスイッチング
<code class="language-csharp">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()); } }</code>
C#5および以前のバージョンの場合、ハードコーディングタイプ名を持つ基本的な「if ... else ... else ... else ... else ... else」構造を使用する以外に選択肢はありません。この方法は厄介で間違いを犯すのが簡単になるかもしれません。
結論<code class="language-csharp">void Foo(object o) { switch (o.GetType().Name) { case nameof(A): // 处理A类型 break; case nameof(B): // 处理B类型 break; default: // 处理其他类型 break; } }</code>C#7およびより高いバージョンモードマッチングは、シミュレーションベースのスイッチングの強力で簡潔な方法を提供します。状態チェーンの需要を排除し、コードの読みやすさを改善し、エラーの可能性を減らします。 C#の初期バージョンの場合、nameof()とswitchステートメントを使用して、ハードコーディングタイプ名よりも柔軟な代替品が提供され、クラシックな「if ... else ... else ... else」構造はまだ理想的ではなく、実行可能な選択肢があります。
以上がパターンは、C#の従来のタイプベースのスイッチングに代わる優れた代替品ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。