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的值. 解决方法
您在switch语句中缺少默认大小写.如果你写了:
if (decision) { toBeAssigned = getValuesA(); } else if (!decision) { toBeAssigned = getValuesB(); } 发生这种情况,因为编译器不知道有多少情况,并且总是假设你没有全部覆盖它们,除非你有一个默认语句,基本上是“如果所有其他情况都不满足,就这样做”.对于if和else也是如此:if(…)和if if(…)是你的“case:”而else是你的“默认:” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |