Нет ничего существующего (стоящего доверия, если бы что-либо вообще), и я сомневаюсь, что когда-либо было бы что-либо запланированное официальное.
Это связано с тем, как реализован метод System.Windows.Forms.ListBox.NativeAdd
:
private int NativeAdd(object item)
{
int num = (int) base.SendMessage(0x180, 0, base.GetItemText(item));
switch (num)
{
case -2:
throw new OutOfMemoryException();
case -1:
throw new OutOfMemoryException(SR.GetString("ListBoxItemOverflow"));
}
return num;
}
Метод GetItemText использует ToString ()
для объекта, который возвращает null
, и поэтому сообщение отправляется с параметром null
, который, в свою очередь, возвращает недопустимый указатель, и вы вводите второй случай, который вызывает исключение.
Когда базовый LB_ADDSTRING
вызов Windows API терпит неудачу, WinForms всегда возвращает исключение OutOfMemoryException
. Комментарий в справочном источнике .NET Framework объясняет, почему:
// On some platforms (e.g. Win98), the ListBox control
// appears to return LB_ERR if there are a large number (>32000)
// of items. It doesn't appear to set error codes appropriately,
// so we'll have to assume that LB_ERR corresponds to item
// overflow.
//
throw new OutOfMemoryException(SR.GetString(SR.ListBoxItemOverflow));