但我想知道为什么编译器不理解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,我很好奇为什么编译器以不同的方式处理这两种情况.
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方面有所不同所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)