This question already has answers here:
Variable declaration in a C# switch statement [duplicate]
                                
                                    (7个答案)
                                
                        
                        
                            odd variable scope in switch statement
                                
                                    (4个答案)
                                
                        
                                6年前关闭。
            
                    
因此,如果我有3种情况的开关,则每种情况下都声明了重复的局部变量。您会认为变量对于这种情况将是局部的,因此您应该能够重复使用相同的名称。但是,这似乎不是“案例”。

显然其他案例块可以看到彼此的变量。

好吧,没什么大不了的吗?除了当您尝试访问它可以明显看到的变量时,它说它看不到????

int index = list.SelectedIndex;

switch(index){

case(0):
   bool val = true;  //First declaration s'allll good
   if(val) //No issues here either obviously
      MessageBox.Show("Huh?");
   break;

case(1):
   bool val = true;  //Says it already exists??
   if(val)
      MessageBox.Show("Huh?");
   break;
case(2):
   bool val3 = true; //Change the variable name so you can use it however,
   if(val)  //When you try to access the val in case 0 it says it doesn't exist?????
      MessageBox.Show("Huh?");
   break;
}


我在这里错过的时空有明显的语法折叠吗?

最佳答案

IL中的变量已定义为switch的范围,因此您不能在其他case语句中重用它们,因为它将重新定义它们。

同样,您仍然必须为每个case定义变量(即,您已经看到,即使一个case具有变量,而其他val却无法实际利用其定义)。

对您来说,更好的方法是在switch之外定义。

关于c# - 怪异的范围界定问题-C#-开关-案例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20402274/

10-15 22:46