2015-09-11 3 views
5

У меня возникла проблема в проекте, где я поставил точку останова и начал работать со свойствами объекта, и я не могу установить значение в значение NULL int. Я могу установить его на нуль, но если я его установлю на что-нибудь, то сразу же проверю значение, оно возвращает 1.Настройка свойств в окне Immediate Window не установлена?

Я вижу это в непосредственном окне, а также окно инспекции, которое появляется, когда вы наводите объект при приостановке в режиме отладки. Также кажется, что это не влияет на текущий код, просто когда вы ломаетесь и пытаетесь играть со значениями.

Я был в состоянии воспроизвести его в новом проекте консоли:

class Program 
    { 
    static void Main(string[] args) 
    { 
     var myValue = new TestItem() 
     { 
     NullableIntValue = null, 
     StringValue = "My test value" 
     }; 

     Console.WriteLine(string.Format("{0} is set to {1}", myValue.StringValue, myValue.NullableIntValue.HasValue ? myValue.NullableIntValue.Value.ToString() : "nothing")); 

     myValue.NullableIntValue = 0; 

     Console.WriteLine(string.Format("{0} is set to {1}", myValue.StringValue, myValue.NullableIntValue.Value)); 

     Console.ReadLine(); 

    } 
    } 

    public class TestItem 
    { 
    public int? NullableIntValue { get; set; } 
    public string StringValue { get; set; } 
    } 

Paste, что в новый проект консоли, и поставить точку останова на «myValue.NullableIntValue = 0;» линия. Затем запустите его.

Когда точки останова, открыть окно и установить значение:

myValue.NullableIntValue = 123; 
123 

Затем проверьте значение:

?myValue.NullableIntValue 
1 

Попробуйте его с чем-то другим:

myValue.NullableIntValue = null 
null 
?myValue.NullableIntValue 
null 

Установите его на что угодно, кроме нуля, и оно всегда будет 1.

Вы также можете навести курсор на линию точки останова «myValue» и позволить VS вскрыть окно проверки, в котором вы видите все значения. Перейдите в NullableIntValue и установите значение 100 (или что-нибудь) и нажмите Enter, и он немедленно изменит его на 1.

Это похоже на поведение этого свойства, т. Е. Если я изменю TestItem.NullableIntValue на переменную вместо свойство работает нормально. И если я присвою значение NullableIntValue в коде и пусть он запустится, похоже, это не проблема, просто не во время перерыва в отладке.

Обратите внимание, что в VS 2013 также было выполнено это задание, и он выполняет задание просто отлично, поэтому он кажется ограниченным VS 2015, и я пробовал как C# 6, так и C# 5, происходит на обоих.

Любые идеи, что может быть причиной этого?

+0

Я попробовал это на своей машине и не смог воспроизвести вашу проблему. Win 10, Visual Studio 2012, установили последнее обновление VS вчера вечером. Ваш VS2015 полностью исправлен? – Christoph

+0

'partial class TestItem'? Есть ли дополнительный код для него где-то еще? – theB

+3

Я вижу это, это ошибка отладчика. Не удивительно, что в прошлом у него было много проблем с нулевым значением. Вы можете использовать Инструменты> Параметры> Отладка> Общие> Использовать режим совместимой совместимости в качестве обходного пути, но это не очень хорошо. Вы можете сообщить об ошибке на веб-сайте connect.microsoft.com –

ответ

2

Это известная ошибка в RTM для Visual Studio 2015. Мы исправили его в Visual Studio Update 1. По сути дела были сорваны сложные типы значений (например, nullables) из процесса отладчика в debuggee. Если вы не хотите устанавливать обновление 1, вы можете обойти его, перейдя в Debug -> Options -> General и проверив «Использовать устаревшие оценки C# и VB Expression Evaluators».

+0

Спасибо за обновление @Patrick Nelson - MSFT! – Mike

Смежные вопросы