2016-08-25 8 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によって追加リンクで説明 "第二" のvar str1は考えます。行の :宣言された場合

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

、この変数の範囲は、使用ステートメントを含む全体のtry {}ブロックであろう。

これは、使用ブロックに2つの "str1"があることを意味しています。

関連する問題