c# – switch语句中的变量初始化问题
发布时间:2020-12-15 04:24:52 所属栏目:百科 来源:网络整理
导读:我所拥有的是简单的switch语句 Control myControl;switch(x){ case TabType.Edit: { myControl= ...; } case TabType.View: { myControl= ...; } } myPageView.Controls.Add(myControl); 在这种情况下编译器告诉我 local variable myControl might not be in
我所拥有的是简单的switch语句
Control myControl; switch(x) { case TabType.Edit: { myControl= ...; } case TabType.View: { myControl= ...; } } myPageView.Controls.Add(myControl); 在这种情况下编译器告诉我
那么,避免这种情况的最佳方法是什么? 一种选择是在switch语句之前初始化myControl.但在这种情况下,我再做一次不必要的初始化. 情况1: Control myControl = null; switch(x) { case TabType.Edit: { myControl= ...; } case TabType.View: { myControl= ...; } } myPageView.Controls.Add(myControl); 下一个选项是使用默认值更改第二种情况.之后编译器将“理解”myControl无论如何都将被初始化并且不会抛出异常. 案例2: Control myControl; switch(x) { case TabType.Edit: { myControl= ...; } default: { myControl= ...; } } myPageView.Controls.Add(myControl); 但是这种情况看起来并不那么好,因为在我的枚举中添加一些新属性之后,它将对所有其他类型执行默认操作(开发人员很容易忘记在此处更改代码,或者可能没有必要为其他枚举类型初始化myControl) . 在这种情况下,最好的方法是什么? 解决方法
您的代码示例表明您将始终在切换块后使用myControl变量.如果是这种情况,那么您应该预先初始化变量,或者添加一个默认子句(如您所述).
如果您担心可能会引入新的枚举值,那么您可以在default子句中抛出一个有意义的异常.当您稍后尝试取消引用变量时,这将保护您不会出现更模糊的NullReferenceException. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |