加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 19:46:47 所属栏目:百科 来源:网络整理
导读:我目前大多数时候都在使用IF语句,但我越来越喜欢switch case语句,因为有时候它更具可读性. 但我想知道为什么编译器不理解switch和if. 一个例子: bool decision = false;IEnumerablestring toBeAssigned;if (decision){ toBeAssigned = getValuesA();}else{
我目前大多数时候都在使用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是你的“默认:”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读