问题标签 [switch-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
201 浏览

.net-core-3.0 - 模式匹配增强:切换模式

刚刚查看了“新” C# 8.0 功能

所以我尝试重写以下代码

对此:

但是,我收到以下编译错误:

只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句。

编译错误

如何用新语法重写它?

0 投票
1 回答
1288 浏览

c#-8.0 - C# switch 表达式 null 大小写

我已经做了一些研究,但还没有找到答案。在 c# 8 switch 表达式中是否有一个表示 null 情况的方式,编译器将x在调用时识别并且不会触发基本情况下的引用警告ToString()?看起来这是一个明显的案例,在这种情况下我不需要使用 null 宽恕运算符!

我有一种感觉,他们只是还没有解决这个问题,但我想我会把这个问题抛在那里。

编辑:

我确实想出了一种方法来消除对 null 宽恕运算符的需求,但我仍然很好奇是否有特定的 null case 语法被识别。这感觉不是最好的方法,因为它并不完全清楚,而且我什至不确定这是否会得到尊重,因为我认为 Nullable 引用实际上不会在运行时影响任何东西,我将很快对此进行测试。

编辑2:

看来我是误会了,这似乎很荣幸。运行以下测试时,断言没有失败。

0 投票
4 回答
3302 浏览

c# - 在 C# switch 表达式中使用块?

我找不到解决此问题的文档。(也许我只是不擅长使用谷歌......)我的猜测是答案是否定的,但是我不明白文档中的哪个地方解决了这个问题。确切地说,我的问题如下。

假设,我想执行这样的事情:

我知道我可以通过使用常规开关或 if/else 来实现所需的行为,但是我很好奇在这种情况下是否可以使用 switch 表达式。

0 投票
2 回答
5406 浏览

c# - switch 表达式中的多个语句:C# 8

Switch 表达式是在 C# 8 中引入的。代码库中有很多地方可以用这种新风格重写。

例如,我有一些代码,用于从字节流中解析数据包:

问题是 - 它不能转换为 switch 表达式

我想到的第一件事是使用 a Func<>,它编译:

F# 已经允许在每个分支中包含多个语句的代码:

现在我被困在使用 switch 语句,但是有没有任何选项可以将它写为 switch 表达式而没有任何奇怪的黑客攻击?

0 投票
1 回答
169 浏览

c# - 代码覆盖范围内未考虑委派 Switch

在使用开关盒时,我发现了以下问题。R# 向我展示了 switch 语句的简化,它在分配变量时基本上将委托绑定到 case 标签。

这样做的好处是对于大型开关案例的可读性,因为您基本上节省了三分之二的行来分配开关。

我的问题:我真的很喜欢这种类型的开关,因为它提高了可读性,但这在 Visual Studio 的代码覆盖工具(VS Enterprise 2019 - 16.4.4)中没有考虑。由于我们的政策致力于实现约 90% 的代码覆盖率,因此每个百分比都是有价值的。

是否有可能将这些开关包含在代码覆盖率中?

0 投票
3 回答
6926 浏览

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

我在我的启动类(.net core 3.1)中添加了一个代码来返回基于参数的类型,我得到了编译时错误。

我在sharplab中创建了一个运行示例。如果 switch 表达式包含它运行良好的字符串或其他对象。

工作示例1:

工作示例2:

错误示例:

原始问题(需要修复):

找到这个链接:https ://github.com/dotnet/csharplang/issues/2728

感谢PavelMarc,以下是修复:

0 投票
1 回答
1075 浏览

c# - 为什么 Visual Studio 2019 推荐使用 switch 表达式而不是 switch 语句?

Visual Studio 2019 建议将我编写的 switch 语句转换为switch 表达式(两者都包含在上下文中)。

对于像这样的简单示例,将其编写为表达式是否有任何技术或性能优势?例如,这两个版本的编译方式是否不同?

陈述

表达

0 投票
1 回答
81 浏览

c# - Azure 函数中的 switch 表达式导致异常

编写 C# Azure 函数并尝试使用 C#8 开关表达式。

根据文档,https: //docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.switchexpressionexception?view=netcore- 3.1,他们表明这应该适用于.net core 3.1

这段使用 switch 表达式的代码不起作用:

执行时会导致以下错误消息:

[4/30/2020 7:21:06 PM] 执行“SaveSensorEvent”(失败,Id=8db720e1-aa19-4f53-b102-3aaa83f19667)[4/30/2020 7:21:06 PM] System.Private.CoreLib :执行功能时出现异常:SaveSensorEvent。> SensorData:无法从程序集“System.Runtime.Extensions,版本=4.2.1.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Runtime.CompilerServices.SwitchExpressionException”。

如果我使用传统的开关,一切都很好。似乎我可能需要更新 Runtime.Extensions - 虽然不确定如何在 .net 核心应用程序中执行此操作。

有任何想法吗?

0 投票
3 回答
9191 浏览

c# - void 方法的 C# 8 开关表达式

我知道C# 8 switch expression返回值或属性匹配的方法的语法。但是如果我们只需要打开一个字符串值并执行一个什么都不返回的方法(没有返回类型/void),那么我们该怎么做呢?我正在考虑某种形式的 Func 但不确定确切的语法。我知道我们可以用常规的 case 语句用旧的方式来做,但试图看看我们是否可以用新的语法来实现同样的效果。

这是问题的示例

可能像:

这可能吗?

0 投票
1 回答
309 浏览

c# - 带有 void 的 C# 8.0 switch 语句

我收到以下错误:Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement

更新:工作解决方案: