可能重复:
语句块中的变量范围
我在c#中有以下代码片段,但是不起作用
static void Main(string[] args)
{
if (true)
{
string name = "test";
}
else
{
string name = "hello";
}
string name = "world";
}
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误,说'name'已经在最后一行声明了,但是如果我改变它就'name = "some string"说没有声明变量名.
C#中的作用域规则与C不同 - 如果在外部作用域中声明变量名称,则在内部作用域之后声明它是无关紧要的.
你在声明string name之外声明了一个变量这一事实if意味着它可以在声明的块中使用if/else.
编译器抱怨,因为您在声明中声明了具有相同名称的其他变量if/else.
如果从最后一行中删除类型,那么变量仅在内部范围内声明,if/else但在它们之外是未知的,因此"未声明变量名称"错误.
以下将编译得很好:
static void Main(string[] args)
{
string name = "world";
if (true)
{
name = "test";
}
else
{
name = "hello";
}
}
Run Code Online (Sandbox Code Playgroud)
这里,变量在外部作用域中声明,因此在内部作用域中可见.你没有在内部范围内重新声明它,所以没有错误.
从你的问题来看,这是否是你想要的并不清楚.