C#:使用if / 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之前声明变量,在块中分配它,然后你可以在之后使用它(只是确保你没有留下它可以最终取消分配的路径,除非你已经为这种可能性做好了准备你用吧).

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

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...