C #, WinForms: ListBox.Items.Add generiert eine OutOfMemoryException, warum?

7

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%     
Austin Salonen 18.11.2009, 16:57
quelle

2 Antworten

12

Dies liegt an der Methode System.Windows.Forms.ListBox.NativeAdd , die implementiert wurde:

%Vor%

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.

    
Darin Dimitrov 18.11.2009, 17:49
quelle
9

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:

%Vor%     
Justin Grant 18.11.2009 17:38
quelle

Tags und Links