C# 使用代码块内部声明的局部变量不是真正的局部变量?

C# 使用代码块内部声明的局部变量不是真正的局部变量?,c#,local-variables,using-statement,C#,Local Variables,Using Statement,我刚刚遇到这个问题。据我所知,“str1”不是应该是一个局部变量吗?我可以在using代码块之外创建一个同名的新变量 当然,我可以创建一个具有不同名称的变量,然后继续,但这确实让我感到困扰。有人能解释一下吗 public int Execute(string sql, params SqlParameter[] parameters) { try { this.AddSql(sql, paramete

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

当然,我可以创建一个具有不同名称的变量,然后继续,但这确实让我感到困扰。有人能解释一下吗

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。 一致:

//var str1 =""; // error because variable str1 is used above
如果声明,该变量的作用域将是整个try{}块,其中包括using语句


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

所以,为了澄清,您不能在using结构之外创建名为“str1”的局部变量?