[C#] null 객체와 함께 using 문에서 Dispose ()가 호출됩니까?

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()널이 아닌 오브젝트에서만 호출됩니다.

http://msdn.microsoft.com/en-us/library/yh598w02.aspx


답변

의 확장 using은 객체가 null호출하기 전에 객체가 아닌지 확인 Dispose하므로 안전합니다.

귀하의 경우 다음과 같은 것을 얻을 수 있습니다 :

IDisposable x = GetObject("invalid name");
try
{
    // etc...
}
finally
{
    if(x != null)
    {
        x.Dispose();
    }
}


답변

당신은 그것을 좋아해야합니다 :

using ((IDisposable)null) { }

여기에는 예외가 없습니다.

사이드 참고 : 함께이 실수하지 않습니다 foreachIEnumerable경우 예외가 발생합니다.


답변

예, 참조를 폐기하기 전에 null 검사가 수행됩니다. Reflector에서 코드를보고 자신을 검사 할 수 있습니다.


답변

내 경험에 따라 null 참조 예외가 발생하지 않습니다. 단순히 무시됩니다.


답변