2016-08-25 127 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 

如果聲明,該變量的範圍將是整個的try {}塊,它包括,使用的語句。

這是不允許的,因爲這意味着我們最終會在使用塊中有兩個「str1」。