Zunächst habe ich die Lösung für die Ausnahme gefunden. Ich bin neugieriger warum es die spezifische Ausnahme erzeugte, die es tat.
In meinem Szenario füge ich ein POCO zu einer ListBox wie folgt hinzu:
%Vor% Dies erzeugte OutOfMemoryException
. Das Problem war, dass ToString
aus dem POCO null
zurückgab. Ich habe einen string.IsNullOrEmpty
Check hinzugefügt, um einen "sicheren" Wert zurückzugeben, wenn null und die Exception weg sind.
Warum generiert dies ein OutOfMemoryException
und nicht etwas anderes (sagen wir NullReferenceException
)?
BEARBEITEN : Elemente werden in einer for-Schleife hinzugefügt.
Vollständiger Aufruf-Stack (unternehmensspezifische Referenzen entfernt) ist unten. Eine Sache zu beachten - das Listenfeld ist leer, wenn dies aufgerufen wird.
%Vor% Dies liegt an der Methode System.Windows.Forms.ListBox.NativeAdd
, die implementiert wurde:
Die GetItemText Methode verwendet ToString()
auf dem Objekt, das null
zurück und so wird eine Meldung mit null
Parameter gesendet, die wiederum einen ungültigen Zeiger zurückgibt und Sie den zweiten Fall eintreten, die die Ausnahme auslöst.
Wenn der zugrunde liegende LB_ADDSTRING
Windows-API-Aufruf fehlschlägt, WinForms gibt immer eine OutOfMemoryException
zurück. Ein Kommentar in der .NET Framework-Referenzquelle erklärt warum: