Симон Моурир дал этот пример :
object o = null;
DateTime d = (DateTime)o; // NullReferenceException
, где unboxing преобразование (литье) из object
(или из одного из классов System.ValueType
или System.Enum
или из типа интерфейса) - тип значения (кроме Nullable<>
) сам по себе дает NullReferenceException
.
В другом направлении конверсия бокса из a Nullable<>
, которая имеет HasValue
, равную false
, на ссылочный тип, может дать ссылку null
, которая затем может привести к NullReferenceException
. Классический пример:
DateTime? d = null;
var s = d.ToString(); // OK, no exception (no boxing), returns ""
var t = d.GetType(); // Bang! d is boxed, NullReferenceException
Иногда бокс происходит по-другому. Например, с помощью этого не общего метода расширения:
public static void MyExtension(this object x)
{
x.ToString();
}
следующий код будет проблематичным:
DateTime? d = null;
d.MyExtension(); // Leads to boxing, NullReferenceException occurs inside the body of the called method, not here.
Эти случаи возникают из-за специальных правил, используемых во время выполнения при боксе Nullable<>
экземпляров.
В разделе Window > Preferences
перейдите в раздел Run/Debug > Console
, затем вы увидите опцию «Limit console output». Вы можете снять этот флажок или изменить номер в текстовом поле «Размер буфера консоли (символов)» ниже.
(Это в Galileo, Kepler, Juno, Luna, Neon, Mars, Helios CDT и Oxygen)
Откройте меню Windows> Настройки.
Разверните настройки Run / Debug> Console.
Установите Console buffer size (characters)
на нечто большее. 2147383647
/ ~ 2GB - это верхний предел (или 1000000
/ ~ 1MB в более старых версиях). Или просто снимите флажок Limit console output
.
Чтобы увеличить размер буфера консоли в eclipse
Перейдите в окно> Настройки> Запустить / Отладить> Консоль и вы можете указать любое количество символов от 1000 до 1000000. [/g0]
Окно> Настройки, перейдите в раздел «Выполнить / Отладка> Консоль >> >>« Конечный вывод консоли ». Размер буфера консоли (символы):» (Этот параметр можно увидеть в Eclipse Indigo, но он ограничивает размер буфера на уровне 1 000 000 )
Альтернатива
Если ваша консоль не пуста, щелкните правой кнопкой мыши в области консоли> Настройки ...> измените значение размера буфера консоли (символы) (рекомендуется) или снимите флажок Конечный вывод консоли (не рекомендуется):
В MAC OS X 10.9.5 и Eclipse Luna Service Release 1 (4.4.1) его не найдено в меню «Окно», а вместо этого: Eclipse> «Настройки»> «Выполнить / Отладка»> «Консоль».
Для пользователей CDT / C / C ++ build также отрегулируйте настройку
в окне> Предпочтения
в разделе C / C ++> Build> Console (!) [/ g2]
(Это время в количестве строк.)
Это также влияет на «CDT Global Build Console».