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

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

概述我目前大多数时候都在使用IF语句,但我越来越喜欢switch case语句,因为有时候它更具可读性. 但我想知道为什么编译器不理解switch和if. 一个例子: bool decision = false;IEnumerable<string> 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是你的“默认:”

总结

以上是内存溢出为你收集整理的c# – 为什么SWITCH和IF在Variable assignement方面有所不同全部内容,希望文章能够帮你解决c# – 为什么SWITCH和IF在Variable assignement方面有所不同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1224920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存