如何在 C# 中的 switch 表达式中创建一个空的默认情况?

Posted

技术标签:

【中文标题】如何在 C# 中的 switch 表达式中创建一个空的默认情况?【英文标题】:How to make an empty default case in switch expression in C#? 【发布时间】:2021-09-08 23:14:21 【问题描述】:

如何在 C# 中的 switch 表达式中创建一个空的默认大小写?

我说的是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"),
            _ => 
        ;
    

还是不行。

【问题讨论】:

你能不删除_ 默认情况吗?如果可以 100% 保证 switch 将始终匹配前面的情况之一。 您在哪个 C# 版本中编译?它不会编译here。 @JohnathanBarclay,我更新了我的问题。请问现在可以试试吗? @JohnathanBarclay,好的。似乎即使是空的大括号也不起作用。我错了。 :( Console.WriteLineswitch 必须返回值时不返回任何内容;可以是var ignore = i switch -1 => "foo", -2 => "ignore", _ => null ; 【参考方案1】:

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

出于您的目的,switch 语句是正确的构造:

int i = -2;
switch (i)

    case -1:
        Console.WriteLine("foo");
        break;
    case -2:
        Console.WriteLine("bar");
        break;

【讨论】:

谢谢。这解决了我的问题,感谢您的帮助。但我会接受另一个答案,因为我喜欢他将 switch 表达式放在Console.WriteLine 中的方式。希望你不要介意。 :) @qqqqqqq 一点都没有:)【参考方案2】:

你正在研究 表达式 switch 确切地说。所有表达式都必须返回一个;而Console.WriteLine 属于void 类型则返回nothing

你可以尝试摆弄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",
     _ => "???"
  );

【讨论】:

以上是关于如何在 C# 中的 switch 表达式中创建一个空的默认情况?的主要内容,如果未能解决你的问题,请参考以下文章

c# 8 switch 表达式:没有找到 switch 表达式的最佳类型

在 C# 中创建正则表达式 [关闭]

如何在 C# 中创建表达式树来表示“String.Contains("term")”?

如何在 UITableView 的 switch 语句中创建变量?

如何在 C# 和 WPF 中的实体框架中创建数据库和表?

c# 8.0 switch 表达式中的多个案例[重复]