问题标签 [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 回答
414 浏览

c# - 在新开关 c# 8.0 中使用 lambda 函数返回值

我想在我的代码中使用新开关,用于方法结果 make log 和 return IActionResult

我尝试做这样的事情:

但是编译器对我说cannot convert lambda expression to type 'IActionResult' because it is not a delegate type

我该如何解决?

0 投票
0 回答
472 浏览

c# - 在与 switch 表达式中的对象模式匹配后取消引用可能的空引用 (CS8602)

我在自定义定义中有以下代码IEqualityComparer<Uri?>

Equals在最后一臂的通话中收到 CS8602 警告,告诉我有可能x存在null。但是我刚刚匹配了 if are不匹配x的对象模式。我是否错过了一个可能导致该分支中的控制流,或者它是不可能的,我应该只是将它的操作员删除?它是分析器错误还是已知限制?{}xnullxnull

更新

可能值得注意的是,只有在我解构元组时才会发生这种情况。此代码是正确的,并且没有给出警告:

0 投票
2 回答
256 浏览

c# - C# 8 开关表达式

我可以用 C#8 替换此代码片段switch expression吗?

请注意,如果 ObjectType 是 Computer,ObjectClass 将包含“person”,因此排序很重要。

此外,这个问题是学术问题,我只对switch expression解决这个特定问题感兴趣,而不是如何解决这个问题。

0 投票
0 回答
127 浏览

c# - 有人可以在 C# switch 表达式中解释这种类型推断“故障”吗?

我在搞乱 C# switch 表达式,我遇到了一些很奇怪的东西。

这是代码:

IDE(Visual Studio)警告我 IDE0004 C# Cast 是多余的。所以我相信它并决定移除演员表。它适用于两个 (Func<int, string>) 强制转换。

所以,我决定删除其中一个:

但是现在,IDE 用红色强调了“switch”关键字。“错误”的消息是“没有为 switch 表达式找到最佳类型”。在这一点上,我假设 IDE 关于冗余的建议是无效的,并且后面会插入一个错误。但是......当我运行程序时,即使关键字带有红色下划线并且出现错误,它也可以正常编译并正常运行(它会打印“hello”并在 ReadLine 上阻塞)。

所以问题是:这是一个错误(来自 IDE 还是编译器)?如果是,我在哪里可以举报?如果不是……有人愿意详细说明为什么会这样吗?

奖励:另外,让我们假设“x”是一个 DateTimeOffset:

现在,“switch”仍然是红色的,但同样的错误,但是,“DayOfWeek”是红色的,鼠标悬停告诉“Cannot resolve symbol 'DayOfWeek'”,但是类型的定义在那里,一切仍然按预期编译和工作输出“你好星期六”。

从那里,如果我删除第二个强制转换 (Func<DateTimeOffset, string>),由于错误 CS0149: Method name expected(我认为它无法正确解析表达式)而无法编译。

0 投票
3 回答
1714 浏览

java - 什么是 switch 表达式,它们与 switch 语句有何不同?

作为 Java SE 12 的一部分,引入了switch表达式,并且自 Java SE 14 起,它们已被标准化。它们与switch陈述有何不同?

0 投票
5 回答
2152 浏览

java - 具有 void 返回类型的 switch 表达式

当 switch 分支调用具有 void 返回类型的方法时,有什么方法可以强制对所有枚举值进行详尽检查?硬编码一个 yield 只是为了哄骗编译器要求穷举是非常丑陋的。

这是我当前的模式(句柄方法有 void 返回类型)

我想使用表达式的原因是在添加新枚举值但未处理时会出现编译错误。

0 投票
2 回答
358 浏览

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

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

我说的是这种语言功能。

这是我正在尝试的:

另外,我尝试不使用逗号:

它仍然不想编译。所以,我试着放一个空函数:

它仍然不起作用。

0 投票
2 回答
280 浏览

java - Java-17 - switch case - 应该删除未使用的方法参数

我有一个简单的方法,它接受一个枚举并返回一个字符串:

但是声纳给了我这个主要错误:Unused method parameters should be removed

如您所见,参数类型在开关中使用。有关更多详细信息,当我使用旧开关盒时,一切都很好。

关于这个问题的任何想法,声纳是否涵盖新的 Java 语法?


嗯,我注意到当我default -> null;正确移除声纳通道时!这很奇怪。

0 投票
2 回答
79 浏览

java - 如何退出 switch 表达式中的方法?

我正在研究 switch 表达式,我想知道如何将控制权传递给调用程序方法,因为“yield”只是从 switch 表达式中退出。我找不到任何方法让它表现得像经典的 switch 语句。

甚至可能吗?

更新:这是一小段代码。

我的意思是:如何避免给变量赋值然后调用return [variable_name]?我想同时返回值和退出开关。

提前致谢

0 投票
4 回答
59 浏览

java - 为什么 Switch 需要语句但接受表达式

我正在研究 switch 表达式,我想我发现了一个奇怪的行为:

为什么我可以键入作为dog()表达式的值,但不允许使用其他类型的表达式?Intellij 提示我"not a statement"错误。

提前致谢。