Безопасно ли использовать 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
он будет вызван, только если объект не равен нулю, а я не получу NullReferenceException
?
c#
idisposable
using
Паоло Тедеско
источник
источник
Ответы:
Да,
Dispose()
вызывается только для ненулевых объектов:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
источник
Dispose()
вызывается только для ненулевых объектов».Расширение для
using
проверки того, что объект находится неnull
перед вызовомDispose
, так что да, это безопасно.В вашем случае вы получите что-то вроде:
источник
Вы должны быть в порядке с этим:
Здесь не исключение.
Примечание стороны: не путайте это с
foreach
иIEnumerable
где будет сгенерировано исключение.источник
Да, перед удалением ссылка будет проверена на ноль. Вы можете проверить себя, просмотрев свой код в Reflector.
источник
Вы не получите исключение нулевой ссылки согласно моему опыту. Это будет просто проигнорировано.
источник