2010-08-11 6 views
2

try 블록 내에 개체 변수를 할당 할 수없는 이유는 무엇입니까?try 블록 내에 객체 변수를 할당 할 수없는 이유는 무엇입니까?

finally 블록에서 변수를 정리하면 "할당되지 않은 로컬 변수 사용"이라는 컴파일러 오류가 발생합니다. 변수가 try 블록 앞에 선언되어 있고 블록에 변수가 null인지 먼저 확인하기 때문에 이는 의미가 없습니다.

왜 다음 코드를 컴파일 할 수 없습니까? dbcnull인지 확인하기 때문에 할당되지 않은 변수를 사용하여 작업을 수행 할 가능성이 없습니다.

예 : DbConnection dbc = null;로 선언 때문에 컴파일러는 변수가 할당되는 것을 확실하게 알 수

DbConnection dbc; 
try { 
    dbc = <some method call returning an open DbConnection> 
    // do stuff 
} catch (Exception e) { // do stuff } 
finally { 
    if (dbc != null) { 
     dbc.Close(); 
    } 
} 
+0

어떤이

DbConnection dbc; 

? – SteveCav

+0

관련이있을 수 있음 : http://stackoverflow.com/questions/94977/why-arent-variables-declared-in-try-in-scope-in-catch-orfinally – cofiem

+0

Jon Skeet이 아무데도 나타나지 않을 것입니다. 최고의 답을 얻으십시오. 하품 소리. –

답변

12

변경합니다. (단순히 dbc를 선언하는 것은 그것을 null 값을 할당과 동일하지 않습니다, 당신은 지역에 명시해야합니다.)

기존의 코드가 실패하는 이유는 예외가 DBC 전에 발생하는 것이 전적으로 가능하다는 것이다 설정됩니다. 따라서 컴파일러는 finally 블록이 실행될 때 dbc가 할당된다고 가정 할 수 없습니다.

자세한 내용은 확실한 할당에 대한 언어 사양 섹션 5.3을 참조하십시오.

http://msdn.microsoft.com/en-us/library/aa691172(VS.71).aspx

+0

변수가 지정되지 않았다면 변수는 null입니까? – CJ7

+0

@Craig, 아니요, 변수는 할당되지 않은 것입니다. '무효'는 임무가 부족하지 않다. –

+0

이것은 C#에 특이한 것입니까? 나는 다른 어떤 언어로 이것을 기억하지 못한다. – CJ7

1

변경 설정 키워드를 제거하는 방법에 대한이

DbConnection dbc = null; 
관련 문제