已声明变量的 C# 开关案例行为
C# switch case behaviour for declared vars
我对 switch-case 条件中术语的使用有点困惑。为什么 c# 在 case
声明的变量中获取所有内容并在 switch
语句的顶部自动声明它们?
例如:
switch (test)
{
case "hello":
string demo = "123";
break;
case "world":
demo = "1234";
break;
// not working
case "hello world":
demo = demo + "1234567";
break;
}
我可以在 case "world"
下分配变量 demo
,即使它是在 case "hello
下声明的。但是c#似乎只声明了值,没有设置任何值,因为获取和设置值,(见下case "hello world"
是不可能的。
为什么 c# 不为每个 case-block 打开一个 term/scope 并用一个简单的 break 或 return 关闭它?
因为您没有开始新的范围。就个人而言,我几乎只在 case
语句中使用块作用域:
switch (test)
{
case "hello":
{
string demo = "123";
break;
}
case "world":
{
var demo = "1234";
break;
}
case "hello world":
{
var demo = 34;
break;
}
}
在我看来,这样做的主要原因是 1) 简单性,以及 2) 与 C 的兼容性。已经有用于启动新块范围的语法,并且使用 { ... }
。无需添加其他规则 "just because"。在 C# 中,not 为每个 case
语句设置单独的范围没有多大意义,因为您被禁止读取可能未分配的变量。
例如,C# 中不允许以下内容:
switch (test)
{
case 1: string demo = "Hello"; goto case 2;
case 2: demo += " world"; break;
}
当然,解决这个问题的方法很简单 - 只需在 switch
范围之外声明局部变量,并在需要时给它一个默认值。
我对 switch-case 条件中术语的使用有点困惑。为什么 c# 在 case
声明的变量中获取所有内容并在 switch
语句的顶部自动声明它们?
例如:
switch (test)
{
case "hello":
string demo = "123";
break;
case "world":
demo = "1234";
break;
// not working
case "hello world":
demo = demo + "1234567";
break;
}
我可以在 case "world"
下分配变量 demo
,即使它是在 case "hello
下声明的。但是c#似乎只声明了值,没有设置任何值,因为获取和设置值,(见下case "hello world"
是不可能的。
为什么 c# 不为每个 case-block 打开一个 term/scope 并用一个简单的 break 或 return 关闭它?
因为您没有开始新的范围。就个人而言,我几乎只在 case
语句中使用块作用域:
switch (test)
{
case "hello":
{
string demo = "123";
break;
}
case "world":
{
var demo = "1234";
break;
}
case "hello world":
{
var demo = 34;
break;
}
}
在我看来,这样做的主要原因是 1) 简单性,以及 2) 与 C 的兼容性。已经有用于启动新块范围的语法,并且使用 { ... }
。无需添加其他规则 "just because"。在 C# 中,not 为每个 case
语句设置单独的范围没有多大意义,因为您被禁止读取可能未分配的变量。
例如,C# 中不允许以下内容:
switch (test)
{
case 1: string demo = "Hello"; goto case 2;
case 2: demo += " world"; break;
}
当然,解决这个问题的方法很简单 - 只需在 switch
范围之外声明局部变量,并在需要时给它一个默认值。