微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 为什么SWITCH和IF在Variable assignement方面有所不同

我目前大多数时候都在使用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语句中缺少认大小写.如果你写了:

if (decision)
{
   toBeAssigned = getValuesA();
}
else if (!decision)
{
   toBeAssigned = getValuesB();
}

发生这种情况,因为编译器不知道有多少情况,并且总是假设你没有全部覆盖它们,除非你有一个认语句,基本上是“如果所有其他情况都不满足,就这样做”.对于if和else也是如此:if(…)和if if(…)是你的“case:”而else是你的“认:”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐