【发布时间】:2019-07-06 22:31:17
【问题描述】:
我之前有以下代码:
public class Program
{
public static void Main(string[] args)
{
int i = 0;
while(condition)
{
.........
.........
if (condition)
{
i = 6;
Console.WriteLine("Inside Block :" +i);
}
else
{
i = 7;
Console.WriteLine("After block : " + i);
}
}
}
}
后来,我发现我不需要任何条件,并且希望每次都将 6 分配给变量i。所以我注释掉了代码,但这样做我犯了一个愚蠢的错误,所以现在我的代码如下所示:
公开课课程 {
public static void Main(string[] args)
{
int i = 0;
while(condition)
{
.........
.........
// a block without condition
{
i = 6;
Console.WriteLine("Inside Block :" +i);
}
}
}
}
如您所见,我只是错误地注释掉/删除了带有if 条件的行,但忘记删除块。现在,这个块在这里意味着什么。每次我想要的时候它都会执行,但是为什么编译时它没有给出任何错误?
这里有什么术语/概念吗?我在Java 中知道Initializer Block,但这不是这里发生的事情。它在Multi-Threading 环境中的工作方式会有所不同吗?
任何信息都会很有帮助。
【问题讨论】:
-
您正在创建一个范围。
-
但是变量是在块外声明的。那么它将如何改变范围?无论我在块内分配给
i的任何值在块外都可用。 -
它不会给您错误或警告,原因与您在表达式中添加多余的括号不会给您错误相同的原因。正如其他人所说,它确实引入了一个额外的范围,但除此之外,为什么应该关心你是否给它
((((1+4))))而不是1+4?