Использование оператора с нулевым объектом
безопасно ли использовать 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?
5 ответов:
расширения для
usingпроверяет, что объект неnullперед вызовомDisposeна нем, так что да, это безопасно.в вашем случае вы получите что-то вроде:
IDisposable x = GetObject("invalid name"); try { // etc... } finally { if(x != null) { x.Dispose(); } }
вы должны быть в порядке с этим:
using ((IDisposable)null) { }здесь нет исключения.
примечание: не путайте этот с
foreachиIEnumerableгде будет выдано исключение.
да, перед утилизацией ссылка будет проверена на нуль. Вы можете проверить себя, просмотрев свой код в Reflector.
вы не получите исключение нулевой ссылки в соответствии с моим опытом. Это будет просто проигнорировано.
Comments