【发布时间】:2020-03-02 09:19:18
【问题描述】:
case when 是相当新的,所以很多答案都没有涉及它。 MSDN 示例是关于强制转换对象,而不是使用原始字符串。
switch (catName)
{
case string c when c.StartsWith("Fluffy"):
// DoSomething
break;
}
这似乎可行,如果您可以省略 string c 部分并改为使用 when catName 会更好。但随后多个情况不起作用:
switch (catName)
{
case string c when c.StartsWith("Fluffy"):
case string c when c.StartsWith("Mr"):
// DoSomething
break;
}
因为你不能声明两个string c。所以你可以改变第二个,但你最终会得到一个字符串 a、字符串 b、字符串 c 等的列表,这看起来不太好。
理想的方式当然是这样的:
switch (catName)
{
case when catName.StartsWith("Fluffy"):
...
break;
}
有没有一种优雅的方法来解决这个问题,还是使用if..else if 方法更好?
【问题讨论】:
-
不,你不能那样做,其他例子是一种通过模式匹配进行的科学怪人开关。您将使用 if then else 保存更多可读字符。您可以使用
List<(Func<string, bool> func, Action action)>()和list.Where(x => x.func(someValue));,但更糟糕的是 IMO -
谢谢。我找不到涉及方法调用的全面答案。
标签: c# switch-statement