Ist es sicher, die using
Anweisung für ein (möglicherweise) Nullobjekt zu verwenden?
Betrachten Sie das folgende Beispiel:
class Test {
IDisposable GetObject(string name) {
// returns null if not found
}
void DoSomething() {
using (IDisposable x = GetObject("invalid name")) {
if (x != null) {
// etc...
}
}
}
}
Ist es garantiert, dass Dispose
nur aufgerufen wird, wenn das Objekt nicht null ist und ich keine bekomme NullReferenceException
?
c#
idisposable
using
Paolo Tedesco
quelle
quelle
Antworten:
Ja,
Dispose()
wird nur für Nicht-Null-Objekte aufgerufen:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
quelle
Dispose()
wird nur für Nicht-Null-Objekte aufgerufen".Die Erweiterung für
using
prüft, ob das Objekt nicht vorhanden ist,null
bevorDispose
es aufgerufen wird. Ja, es ist sicher.In Ihrem Fall würden Sie so etwas bekommen wie:
quelle
Sie sollten damit einverstanden sein:
Keine Ausnahme hier geworfen.
Randnotiz: Verwechseln Sie dies nicht mit
foreach
undIEnumerable
wo eine Ausnahme ausgelöst wird.quelle
Ja, vor dem Entsorgen wird die Referenz auf Null gesetzt. Sie können sich selbst überprüfen, indem Sie Ihren Code in Reflector anzeigen.
quelle
Nach meiner Erfahrung erhalten Sie keine Nullreferenzausnahme. Es wird einfach ignoriert.
quelle