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"。