我目前大部分时间都在使用 IF 语句,但我越来越喜欢 switch case 语句,因为有时它更具可读性。
但我想知道为什么编译器不能理解 switch 以及 if
。
一个例子:
bool decision = false;
IEnumerable<string> toBeAssigned;
if (decision)
{
toBeAssigned = getValuesA();
}
else
{
toBeAssigned = getValuesB();
}
foreach (var elem in toBeAssigned )
{
// do something
}
这应该可以很好地编译并且 toBeAssigned 可以在 foreach 中使用而没有问题。
但:
bool decision = false;
IEnumerable<string> toBeAssigned;
switch(decision)
{
case true:
toBeAssigned = getValuesA();
break;
case false:
toBeAssigned = getValuesB();
break;
}
foreach (var elem in toBeAssigned )
{
// do something
}
不为我编译 - 编译器提示从未分配 toBeAssigned 的值。
由于两者都应该编译为相同的 IL,我很好奇为什么编译器会以不同的方式对待这两种情况。
最佳答案
您在 switch 语句中缺少 default
大小写。如果你写了同样的事情也会发生:
if (decision)
{
toBeAssigned = getValuesA();
}
else if (!decision)
{
toBeAssigned = getValuesB();
}
发生这种情况,因为编译器不知道有多少情况,并且总是假设您没有涵盖所有情况,除非您有一个
default
语句,该语句基本上说“如果不满足所有其他情况,请执行此操作”。 if
和 else
也是如此:if(...)
和 else if(...)
是你的“case:”,else
是你的“default:”关于c# - 为什么 SWITCH 和 IF 在变量分配方面存在差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20607781/