c# - 使用代码块在内部声明的局部变量不是真正的局部变量吗?

标签 c# local-variables using-statement

<分区>

我刚遇到这个问题。据我所知,“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{} block ,其中包括 using 语句。

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

关于c# - 使用代码块在内部声明的局部变量不是真正的局部变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39137278/

相关文章:

c# - 从可能存在或可能不存在的字典中读取值的线程安全方式

java - 内部类非final变量java

compiler-construction - MIPS 编译器局部变量

javascript - 如果存在局部窗口变量,如何访问全局窗口变量?

c# - CA2202 : Do not dispose objects multiple times

c# - 哪个更好,什么时候: using statement or calling Dispose() on an IDisposable in C#?

c# - Web 服务性能/吞吐量的异步方法

c# - 调试 Xamarin C# iOS App 时抛出 Objective_C 异常

c# - 我应该如何在 Java 中复制 C#'s ' using' 语句的功能?

c# - 在 C# 中创建透明覆盖层