gpt4 book ai didi

c# - 为什么在一个案例语句中声明的变量在其他案例的范围内?

转载 作者:太空狗 更新时间:2023-10-29 20:49:22 25 4
gpt4 key购买 nike

为什么下面的代码可以编译?我希望它会提示 foo 没有在第二个 case 分支中声明。编译器是否处理声明以使其在所有情况下都在范围内?

using System;

namespace Scratch
{
class Scratch
{
public static void Main()
{
var x = 2;
switch (x)
{
case 1:
var foo = "one";
Console.Out.WriteLine(foo);
break;
case 2:
foo = "two"; // is foo in scope here?
Console.Out.WriteLine(foo);
break;
}
}
}
}

最佳答案

@JonSkeet 所说的是正确的:C/C++/C# 意义上的“ block ”与逻辑意义上的“案例”不同。但他没有提到解决这个问题的“最佳实践”:如果你想在 switch 语句的一个案例中声明一个变量,最好将整个逻辑“案例”包装在一个 block 中。这样,编译器识别的逻辑“案例”和实际“范围”将是一致的。

public static void Main()
{
var x = 2;
switch (x)
{
case 1: { // notice these braces I added
var foo = "one";
Console.Out.WriteLine(foo);
break;
}
case 2:
foo = "two"; // hooray! foo is no longer in scope here
Console.Out.WriteLine(foo);
break;
}
}

关于c# - 为什么在一个案例语句中声明的变量在其他案例的范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416272/

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