首页 >后端开发 >C++ >是否有更好的替代方法来模拟C#中的类型开关?

是否有更好的替代方法来模拟C#中的类型开关?

Barbara Streisand
Barbara Streisand原创
2025-01-28 15:11:13792浏览

Are There Better Alternatives to Simulating a Switch on Type in C#?

C# 中是否存在比根据类型进行切换更好的替代方案?

提供的代码片段是模拟在 C# 中根据类型进行切换的一种常见方法,当由于类型关系而无法进行真正的根据类型进行切换时,可以使用这种方法。但是,在不同的场景中,可能有几种更合适的替代方案。

C# 7 及更高版本

随着 C# 7 的引入,可以通过模式匹配实现真正的根据类型进行切换:

<code class="language-csharp">switch(shape)
{
    case Circle c:
        WriteLine($"圆形,半径为 {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} 正方形");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} 矩形");
        break;
    default:
        WriteLine("<未知形状>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}</code>

C# 6

在 C# 6 中,可以在 switch 语句中使用 nameof() 运算符:

<code class="language-csharp">switch(o.GetType().Name) {
    case nameof(AType):
        break;
    case nameof(BType):
        break;
}</code>

C# 5 及更早版本

在 C# 5 之前,仍然可以模拟根据类型进行切换,但这需要使用包含类型名称的字符串:

<code class="language-csharp">switch(o.GetType().Name) {
  case "AType":
    break;
}</code>

选择哪种替代方案取决于应用程序的具体要求和使用的 C# 版本。

以上是是否有更好的替代方法来模拟C#中的类型开关?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn