如何在 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.WriteLine
在switch
必须返回值时不返回任何内容;可以是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# 中创建表达式树来表示“String.Contains("term")”?