c# NullReferenceException объявление целого числа
Привет Сообщество,
у меня проблема.
Почему он падает здесь с NullReferenceException?
не работать
private void textBox1_KeyDown(object sender, KeyEventArgs e) { int a = 0; //<- throwing NullReference Exception. Why??? a = Int32.Parse( textBoxWagenID.Text); m_EntityContext.Foo.Where( p => p.Bar == a).First(); }
Работающий
private void textBox1_KeyDown(object sender, KeyEventArgs e) { DoSth(); } private void DoSth() { int a = 0; //<- not throwing NullReference Exception!!!! a = Int32.Parse( textBoxWagenID.Text); m_EntityContext.Foo.Where( p => p.Bar == a).First(); }
Разве это не одно и то же??
Florian Rappl
Вы уверены, что проблема именно в этом? Я очень в этом сомневаюсь.
Целое число никогда не даст вам нулевую ссылку, так как оно является структурой и поэтому выделяется в стеке (т. е. Даже неназначенная любая структура уже будет иметь значение. Единственный способ сделать это-использовать переменную типа int?. Но это не так.
Тем не менее, я видел коды, бросающие ошибки в других местах. Это может быть так и здесь.
Sergey Alexandrovich Kryukov
Думаю, вы совершенно правы. Я подозреваю, что причина в том, что сеанс отладки испорчен. Существуют относительно редкие ситуации, когда отладчик запутывается.
Пожалуйста, посмотрите мой ответ.
—СА
[no name]
просто попробовал это на моей машине, она работает нормально ... должно быть что-то еще
Sergey Alexandrovich Kryukov
Вы правы. Я подозреваю, что это ситуация, с которой я знаком: испорченный сеанс отладки — пожалуйста, смотрите мой ответ.
—СА
Wendelius
Вы уверены, что исключение действительно срабатывает в объявлении int? Следующие строки имеют гораздо больший потенциал.
Sergey Alexandrovich Kryukov
Вы правы, этого не может быть.
Я подозреваю, что это ситуация, с которой я знаком: испорченный сеанс отладки — пожалуйста, смотрите мой ответ.
—СА
Jibesh
int a=0; никогда не бросайте исключение это может быть что-то другое, можете ли вы поставить try catch и скопировать стек исключений здесь.
private void textBox1_KeyDown(отправитель объекта, KeyEventArgs e)
{
пробовать {
int a = 0; / / < - исключение nullreference. Почему???
а = int32 значение.Синтаксический анализ( textBoxWagenID.Текст);
m_EntityContext.Фу.Где( Р =&ГТ; п.Бар == а).Первый();
}catch(исключение e)
{
строку сообщения = е.Метод toString();
}
}
скопируйте и вставьте то, что вы получаете в строке сообщения.
Вы можете использовать ссылку улучшить вопрос, чтобы изменить свой вопрос
Sergey Alexandrovich Kryukov
Вы правы, этого не может быть. Я подозреваю, что это ситуация, с которой я знаком: испорченный сеанс отладки — пожалуйста, смотрите мой ответ.
—СА
karnayanar
просто "ссылка на объект не установлена на экземпляр объекта".
karnayanar
Я попробовал следовать с отладчиком шаг за шагом:
private void textBox1_KeyDown(отправитель объекта, KeyEventArgs e)
{
int b; / / отладчик показывает -> b = 0; a = "" равно NULL
b = 1; / / отладчик показывает - > b = 1; a = "" равно NULL
int a; / / отладчик показывает -> b = 0; a = "" равно NULL
a = 1; / / < - выбрасывает исключение NullReference.
а = int32 значение.Синтаксический анализ( textBoxWagenID.Текст);
m_EntityContext.Фу.Где( Р =&ГТ; п.Бар == а).Первый();
}
Это интересно.
Таким образом, структура int является нулевой, даже если тип не является int?.
Может ли это иметь какое-то отношение к тому, что переменная используется в запросе?
Когда я не использую var a в запросе, он работает нормально.
Philippe Mori
Какая версия Visual Studio? Какой движок отладчика? И используете ли вы функцию редактирования и продолжения? Вы установили все обновления?
Я видел случай, когда редактирование кода во время отладки вызывало такое поведение... Поэтому первое, что нужно попробовать, это остановить отладку, затем построить решение и перезапустить отладку.