É seguro usar a using
instrução em um objeto nulo (potencialmente)?
Considere o seguinte exemplo:
class Test {
IDisposable GetObject(string name) {
// returns null if not found
}
void DoSomething() {
using (IDisposable x = GetObject("invalid name")) {
if (x != null) {
// etc...
}
}
}
}
É garantido que Dispose
será chamado apenas se o objeto não for nulo e eu não receberei um NullReferenceException
?
c#
idisposable
using
Paolo Tedesco
fonte
fonte
Respostas:
Sim,
Dispose()
é chamado apenas em objetos não nulos:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
fonte
Dispose()
é chamado apenas em objetos não nulos".A expansão para
using
verificar se o objeto não estánull
antes de chamáDispose
-lo, portanto, é seguro.No seu caso, você obteria algo como:
fonte
Você deve ficar bem com isso:
Nenhuma exceção lançada aqui.
Nota lateral: não confunda isso com
foreach
eIEnumerable
onde uma exceção será lançada.fonte
Sim, antes de Descartar, a referência será verificada como nula. Você pode se examinar visualizando seu código no Reflector.
fonte
Você não receberá uma exceção de referência nula conforme minha experiência. Será simplesmente ignorado.
fonte