2016-08-25 10 views
2

Я только что столкнулся с этой проблемой. Насколько мне известно, «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; 
     } 
+0

Итак, чтобы уточнить, вы не можете создать локальную переменную с именем «str1» вне структуры использования? – nmg49

ответ

1

Как объяснено в ссылке добавленной Yeldar, думать о «второй» вар str1. в строке:

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

если объявлено, объем этого переменный будет вся попытка {} блок, который включает в себя, с использованием утверждения.

Это не допускается, так как это означает, что мы получим два «str1» в используемом блоке.

 Смежные вопросы

  • Нет связанных вопросов^_^