gpt4 book ai didi

c# - switch 语句中的奇变量范围

转载 作者:IT老高 更新时间:2023-10-28 22:16:35 29 4
gpt4 key购买 nike

This question让我想起了一个关于开关的老问题:

    int personType = 1;
switch (personType)
{
case 1:
Employee emp = new Employee();
emp.ExperienceInfo();
break;
case 2:
Employee emp = new Employee();
//Error: A local variable named 'emp' is already defined in this scope
emp.ManagementInfo();
break;
case 3:
Student st = new Student();
st.EducationInfo();
break;
default:
MessageBox.Show("Not valid ...");
}

为什么 emp 在“案例 2”中被识别?在 C++ 中(如果我没记错的话)我们可以同时使用多个案例,但在 C# 中这是不可能的,我们应该用 break 关闭 case 1 所以下面的代码在 C++ 中似乎是正确的,而在 C# 中是错误的:

case 1:
case 2:
SomeMethodUsedByBothStates();

当我们不能有这样的行为时,为什么我们应该能够在 case 1 中声明 emp 并在 case 2 中看到它?如果从来没有两种情况同时发生,那为什么要同时看到对象呢?

最佳答案

在 c++ 或 c# 中,案例不会创建范围。在 case 中声明的所有这些变量都在相同的范围内,即 switch 语句的范围内。如果您希望这些变量在某些特定情况下是本地的,则需要使用大括号:

switch (personType)
{
case 1: {
Employee emp = new Employee();
emp.ExperienceInfo();
break;
}
case 2: {
Employee emp = new Employee();
// No longer an error; now 'emp' is local to this case.
emp.ManagementInfo();
break;
}
case 3: {
Student st = new Student();
st.EducationInfo();
break;
}
...
}

关于c# - switch 语句中的奇变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724281/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com