This question already has answers here:
Variable declaration in a C# switch statement [duplicate]
(7个答案)
odd variable scope in switch statement
(4个答案)
6年前关闭。
因此,如果我有3种情况的开关,则每种情况下都声明了重复的局部变量。您会认为变量对于这种情况将是局部的,因此您应该能够重复使用相同的名称。但是,这似乎不是“案例”。
显然其他案例块可以看到彼此的变量。
好吧,没什么大不了的吗?除了当您尝试访问它可以明显看到的变量时,它说它看不到????
我在这里错过的时空有明显的语法折叠吗?
(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