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

时间:2016-08-25 05:25:55

标签: c# local-variables using-statement

我刚遇到这个问题。据我所知,isn&#t; str1 "应该是一个局部变量,我能够在使用代码块之外创建一个同名的新变量吗?

当然我可以创建一个具有不同名称的变量并继续前进,但这真的让我很烦。有人可以解释一下吗?

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;
        }

1 个答案:

答案 0 :(得分:1)

如Yeldar添加的链接中所述, 想想"第二" var str1。  在线:

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

如果声明,则此变量的范围将是整个try {}块,其中包含using语句。

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