如何在 C# 的 switch 表达式中创建一个空的 default case?

How to make an empty default case in switch expression in C#?

如何在 C# 的 switch 表达式中创建一个空的 default case?

我说的是 this 语言功能。

这是我正在尝试的:

using System;
                    
public class Program
{
    public static void Main()
    {
        int i = -2;
        var ignore = i switch {
            -1 => Console.WriteLine("foo"),
            -2 => Console.WriteLine("bar"),
            _ => ,
        };
    }
}

此外,我试过没有逗号:

using System;
                    
public class Program
{
    public static void Main()
    {
        int i = -2;
        var ignore = i switch {
            -1 => Console.WriteLine("foo"),
            -2 => Console.WriteLine("bar"),
            _ =>
        };
    }
}

还是不想编译。所以,我试着放一个空函数:

using System;
                    
public class Program
{
    public static void Main()
    {
        int i = -2;
        var ignore = i switch {
            -1 => Console.WriteLine("foo"),
            -2 => Console.WriteLine("bar"),
            _ => {}
        };
    }
}

还是不行。

与所有表达式一样,开关 表达式 必须能够计算出一个值。

为了您的目的,switch 语句 是正确的构造:

int i = -2;
switch (i)
{
    case -1:
        Console.WriteLine("foo");
        break;
    case -2:
        Console.WriteLine("bar");
        break;
}

您正在研究 表达式 switch 确切的表达式。所有表达式必须return一个;而 Console.WriteLine 是类型 void returns nothing.

到fiddle用switch表达式你可以试试

public static void Main() {
  int i = -2;

  // switch expression: given i (int) it returns text (string)
  var text = i switch {
    -1 => "foo",
    -2 => "ignore",
     _ => "???" // or default, string.Empty etc.
  };

  Console.WriteLine(text);
}

或将表达式放入WriteLine:

public static void Main() {
  int i = -2;

  // switch expression returns text which is printed by WriteLine  
  Console.WriteLine(i switch {
    -1 => "foo",
    -2 => "ignore",
     _ => "???"
  });
}