我目前大部分时间都在使用 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
}
这应该可以正常编译,并且可以毫无问题地在 foreach 中使用 toBeAssigned。
但是:
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,我很好奇为什么编译器会以不同的方式处理这两种情况。
最佳答案
您的 if
语句涵盖了所有可能的情况,但编译器没有意识到 switch
也这样做:您缺少 default
案例。
编译器认为 toBeAssigned
可能未设置任何值,因此会发出错误。
关于c# - 为什么 SWITCH 和 IF 在变量赋值方面不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20607781/