using
(잠재적으로) 널 오브젝트 에서 명령문 을 사용하는 것이 안전 합니까?
다음 예제를 고려하십시오.
class Test {
IDisposable GetObject(string name) {
// returns null if not found
}
void DoSomething() {
using (IDisposable x = GetObject("invalid name")) {
if (x != null) {
// etc...
}
}
}
}
Dispose
객체가 null이 아닌 경우에만 호출 되는 것이 보장 NullReferenceException
됩니까?
답변
예, Dispose()
널이 아닌 오브젝트에서만 호출됩니다.
답변
의 확장 using
은 객체가 null
호출하기 전에 객체가 아닌지 확인 Dispose
하므로 안전합니다.
귀하의 경우 다음과 같은 것을 얻을 수 있습니다 :
IDisposable x = GetObject("invalid name");
try
{
// etc...
}
finally
{
if(x != null)
{
x.Dispose();
}
}
답변
당신은 그것을 좋아해야합니다 :
using ((IDisposable)null) { }
여기에는 예외가 없습니다.
사이드 참고 : 함께이 실수하지 않습니다 foreach
및 IEnumerable
경우 예외가 발생합니다.
답변
예, 참조를 폐기하기 전에 null 검사가 수행됩니다. Reflector에서 코드를보고 자신을 검사 할 수 있습니다.
답변
내 경험에 따라 null 참조 예외가 발생하지 않습니다. 단순히 무시됩니다.