加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#:使用if / switch时出错:“已在此范围内定义的局部变量”

发布时间:2020-12-16 02:04:10 所属栏目:百科 来源:网络整理
导读:参见英文答案 C# declare variable into if statement????????????????????????????????????4个 我是C#的新手,我的问题可能很简单,但我不明白: 我需要根据条件为数组赋值. 所以我可以使用“if”的“switch”语句来检查条件. 但是,如果我使用“switch”,那么
参见英文答案 > C# declare variable into if statement????????????????????????????????????4个
我是C#的新手,我的问题可能很简单,但我不明白:

我需要根据条件为数组赋值.
所以我可以使用“if”的“switch”语句来检查条件.

但是,如果我使用“switch”,那么我会收到错误“已在此范围内定义的局部变量”.

如果我使用“if”然后我得到一个错误“在当前上下文中不存在”

例:

int x;
x=1;

//1:
//a)  does work...
if (x==1)
{
        string[,] arraySpielfeld2d = 
        {
         {"1","1" },{"1","1" }
        };
}
else
{
        string[,"1" }
        };
}


//b) but this does not work
MessageBox.Show(arraySpielfeld2d[0,0]);  //error: does not exist in current context


//2) doesn't work at all
switch (x)
    {

    case 1:
        string[,"1" }
        };
        break;


    case 2:
        string[,] arraySpielfeld2d =    //error:Local variable already defined in this scope
        {
         {"2","2" },{"2","2" }
        };
        break;

    }

所以使用“if”我至少可以填充数组(1a)……但是我无法访问数组元素(1b)……
使用“开关”根本不起作用.

那么我如何根据条件(如果/ switch)分配然后访问数组的值?

我使用Visual Studio 2010.

谢谢

解决方法

你在这里遇到的是变量的范围.

在块{}内声明的任何变量仅在该块中可见.块后面的任何代码都无法看到它.因此,你的if-using代码声明了变量,但它在这两个分支中这样做,所以后面的代码根本看不到它.

解决方案是在if之前声明变量,在块中分配它,然后你可以在之后使用它(只是确保你没有留下它可以最终取消分配的路径,除非你已经为这种可能性做好了准备你用吧).

切换代码不起作用,因为整个语句只有一个块,并且在其中声明了两次相同的变量名.

它仍然具有相同的范围问题,因为该变量在开关块外部不可见.同样,解决方案是首先声明变量,然后在开关内分配变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读