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
方法更好?
答案 0 :(得分:0)
我知道您说过两个不同的字符串不是很好,但这对我来说似乎很容易理解,这样做真的有问题吗?
string catName = "Fluffy";
switch (catName)
{
case string c when c.StartsWith("Fluffy"):
case string d when d.StartsWith("Mr"):
Console.WriteLine(catName);
break;
default:
Console.WriteLine("Name does not start with Mr or Fluffy.");
break;
}
或者,根据Krustys答案中的“参考”链接,您可以这样做:
string catName = "Noodle";
switch (catName)
{
case string c when (c.StartsWith("Fluffy") || c.StartsWith("Mr")):
Console.WriteLine(catName);
break;
default:
Console.WriteLine("Name does not begin with Mr or Fluffy.");
break;
}
答案 1 :(得分:0)
不能,因为您正在使用the pattern matching into the switch statement并且类型是在编译时评估的:
expr的编译时类型是类型的基类
无论如何,您可以使用相同的变量名,因为它们的作用域是本地的。 Reference