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

,이 변수의 범위는 using 문을 포함하는 전체 시도 {} 블록 될 것이다.

그렇다고해서 사용 블록에 두 개의 "str1"이 생기게됩니다.