이거 보긴 봤는데 저러면 인덴트 더 깊어지거나 dispose 시점도 정확히 조절 안되는거같아서 걍 finally 쓰는게 나아 보여서요..
익명(39.7)2023-04-20 15:46
답글
인덴트 문제는 C#8.0 이상에선 해결되었고 (using var로 같은 인덴트에서 해결됨) using은 해당 블록 벗어날 때 Dispose를 부른다는 것만 알고 있으면 시점 문제도 없는데요...
F#(bluegkstjr)2023-04-20 15:52
답글
선언형은 해당 코드블럭 끝난 뒤에 호출되는거 아님? 그런데 코드블럭이 좀 길어질 수도 있잖아
익명(39.7)2023-04-20 15:57
답글
굳이 끝날 때만이 아니라 try에 의해 강제로 벗어나도 호출됨. 그리고 코드블럭이 좀 길어서 중간에 Dispose 하고 싶다면 그냥 예전처럼 중괄호로 묶어도 됨. 근데 지금 try catch랑 같이 쓸 때를 얘기하는거 아니었음? try 내에서 그렇게 긴 코드를 작성하는 것 자체가 바람직한 상황이 아닐텐데?
F#(bluegkstjr)2023-04-20 16:03
답글
선언형이 try에 의해 강제로 벗어나는 상황에 작동되면 괜찮은 아이디어네. 그런데 내가 궁금한건 예외가 안잡히고 정상적으로 작동되는 경우에도 작동됨? 예외구문이 짧은게 좋기는 하나, 예외처리 이후에도 코드가 꽤 진행될 수 있어서 그럼
익명(39.7)2023-04-20 16:08
답글
try 안에 선언형 using을 넣을 경우 1) 에러가 발생하면 그 시점에서 try 블럭을 벗어나니까 Dispose를 수행하고 catch로 넘어감. 즉, catch구문에 진입한 시점에서는 이미 Dispose가 된 상태임. 2) 에러가 발생하지 않으면 그냥 할일 다 하고 try 블럭을 벗어나니까 Dispose가 수행됨. 만일 finally 구문이 존재하면 1에서와 같은 이유로 인해 finally 진입 전에 이미 Dispose가 된 상태임.
F#(bluegkstjr)2023-04-20 16:12
답글
요약하면 try도 결국엔 코드블럭이라 어떤 식으로든 그 구간을 벗어나면 Dispose가 수행됨을 보장해줌.
F#(bluegkstjr)2023-04-20 16:13
답글
아하 그러면 선언형이 상당히 괜찮구나
익명(39.7)2023-04-20 16:16
c#할빠에 c++함
익명(117.110)2023-04-20 15:43
using 한줄짜리로 대치가능인데
익명(211.246)2023-04-20 15:51
Using ㄱ.냥 문법 설탕 아니였나?
익명(103.47)2023-04-21 11:41
예외는 명시적으로 try ~ catch 하고
using은 try 구문 밖에 선언형으로 작성
using이랑 try catch를 같이 쓰면 되지 왜 하나만 쓰려 함?
https://stackoverflow.com/a/59778978
이거 보긴 봤는데 저러면 인덴트 더 깊어지거나 dispose 시점도 정확히 조절 안되는거같아서 걍 finally 쓰는게 나아 보여서요..
인덴트 문제는 C#8.0 이상에선 해결되었고 (using var로 같은 인덴트에서 해결됨) using은 해당 블록 벗어날 때 Dispose를 부른다는 것만 알고 있으면 시점 문제도 없는데요...
선언형은 해당 코드블럭 끝난 뒤에 호출되는거 아님? 그런데 코드블럭이 좀 길어질 수도 있잖아
굳이 끝날 때만이 아니라 try에 의해 강제로 벗어나도 호출됨. 그리고 코드블럭이 좀 길어서 중간에 Dispose 하고 싶다면 그냥 예전처럼 중괄호로 묶어도 됨. 근데 지금 try catch랑 같이 쓸 때를 얘기하는거 아니었음? try 내에서 그렇게 긴 코드를 작성하는 것 자체가 바람직한 상황이 아닐텐데?
선언형이 try에 의해 강제로 벗어나는 상황에 작동되면 괜찮은 아이디어네. 그런데 내가 궁금한건 예외가 안잡히고 정상적으로 작동되는 경우에도 작동됨? 예외구문이 짧은게 좋기는 하나, 예외처리 이후에도 코드가 꽤 진행될 수 있어서 그럼
try 안에 선언형 using을 넣을 경우 1) 에러가 발생하면 그 시점에서 try 블럭을 벗어나니까 Dispose를 수행하고 catch로 넘어감. 즉, catch구문에 진입한 시점에서는 이미 Dispose가 된 상태임. 2) 에러가 발생하지 않으면 그냥 할일 다 하고 try 블럭을 벗어나니까 Dispose가 수행됨. 만일 finally 구문이 존재하면 1에서와 같은 이유로 인해 finally 진입 전에 이미 Dispose가 된 상태임.
요약하면 try도 결국엔 코드블럭이라 어떤 식으로든 그 구간을 벗어나면 Dispose가 수행됨을 보장해줌.
아하 그러면 선언형이 상당히 괜찮구나
c#할빠에 c++함
using 한줄짜리로 대치가능인데
Using ㄱ.냥 문법 설탕 아니였나?
예외는 명시적으로 try ~ catch 하고 using은 try 구문 밖에 선언형으로 작성