微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – switch语句中的变量初始化问题

我所拥有的是简单的switch语句
Control myControl;
switch(x)
{
     case TabType.Edit:
     {
         myControl= ...;
     }

     case TabType.View:
     {

         myControl= ...;
     }
 }

 myPageView.Controls.Add(myControl);

在这种情况下编译器告诉我

local variable myControl might not be initialized before accessing

那么,避免这种情况的最佳方法是什么?

一种选择是在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.

原文地址:https://www.jb51.cc/csharp/91733.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐