我看到了有关使用“ switch”和条件“ when”使用整数范围的答案,但是我不明白它的工作原理,因为它在“ case”中声明了一个新变量,我不知道它是如何运行的与传递给switch求值的变量有关。
int i = 63;
switch (i)
{
case int n when (n >= 100):
Console.WriteLine($"I am 100 or above: {n}");
break;
case int n when (n < 100 && n >= 50 ):
Console.WriteLine($"I am between 99 and 50: {n}");
break;
case int n when (n < 50):
Console.WriteLine($"I am less than 50: {n}");
break;
}
答案 0 :(得分:3)
在这种情况下,n
只是另一个保存i
值的变量。用一些伪代码换个角度看可能会更有帮助。
public abstract class Animal
{
public abstract string Talk();
}
public class Dog : Animal
{
public string Talk(){
return "Bark";
}
}
//cat class : Animal
//elephant class : Animal
Animal a = GetSomeRandomAnimal();
switch (a) {
case Dog d:
Console.WriteLine($"The dog says {d.Talk()}");
case Cat c:
Console.WriteLine($"The cat says {c.Talk()}");
//etc
}
在这里,案例正在检查a
是Dog
还是Cat
或指定的任何其他案例。希望可以将其清除一点。