使用代码块内部声明的局部变量并不是真正的局部变量
本文关键字:局部变量 并不是 声明 代码 内部 | 更新日期: 2023-09-27 18:03:48
我刚刚遇到这个问题。据我所知,是不是"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;
}
正如Yeldar添加的链接所解释的那样,考虑"第二个"变量str1。排队:
//var str1 =""; // error because variable str1 is used above
如果声明了,这个变量的作用域将是整个try{}块,其中包括using语句。
是不允许的,因为这意味着,我们最终会在using块中有两个"str1"。