关于c#:使用代码块在里面声明的局部变量实际上不是局部变量?

A local variable declared inside using code block is not really a local variable?

本问题已经有最佳答案,请猛点这里访问。

我刚刚遇到这个问题。据我所知,"str1"不应该是局部变量吗?我可以在使用代码块之外创建一个同名的新变量吗?

当然,我可以用不同的名称创建一个变量,然后继续,但这真的让我很困扰。有人能解释一下吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int Execute(string sql, params SqlParameter[] parameters)
        {
            try
            {
                this.AddSql(sql, parameters);
                using (var cmd = new SqlCommand(sql, this.connection))
                {
                    var str1 ="";
                }
                //var str1 =""; // error because variable str1 is used above
                //str1 =""; // this also causes an error because"Can not resolve symbol 'str1'"
            }
            catch (Exception e)
            {
                //...
            }
            return 0;
        }


正如Yeldar添加的链接所解释的,想想"第二个"var str1。在线:

1
//var str1 =""; // error because variable str1 is used above

如果声明,这个变量的作用域将是整个try块,其中包括using语句。

这是不允许的,因为这意味着,我们最终会在using块中有两个"str1"。