2015-09-11 12 views
5

Mam problem w projekcie, w którym umieściłem punkt przerwania i zacznę pracować z właściwościami obiektu, i nie mogę ustawić wartości do wartości zerowej int. Mogę ustawić ją na wartość null, ale jeśli ustawię ją na wartość, to natychmiast sprawdzam wartość, zwraca 1.Ustawianie właściwości w oknie bezpośrednim nie jest ustawione?

Widzę to w bezpośrednim oknie, a także okno inspekcji, które pojawia się po najechaniu myszą obiekt po zatrzymaniu w trybie debugowania. Wydaje się również, że nie ma to wpływu na uruchamianie kodu, tuż po złamaniu i próbie gry z wartościami.

udało mi się odtworzyć go w nowym projekcie konsoli:

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; } 
    } 

wklej to do nowego projektu konsoli i umieścić punkt przerwania na „myValue.NullableIntValue = 0;” linia. Następnie uruchom go.

Po zerwaniu trafienia otwórz natychmiastowe okno i ustawić wartość:

myValue.NullableIntValue = 123; 
123 

Następnie sprawdzić wartość:

?myValue.NullableIntValue 
1 

spróbować z czymś innym:

myValue.NullableIntValue = null 
null 
?myValue.NullableIntValue 
null 

Ustaw na wartość inną niż null i zawsze będzie to 1.

Możesz także zatrzymać kursor myszy nad linią przerwań "myValue" i pozwolić VS otworzyć okno inspekcji, w którym zobaczysz wszystkie wartości. Przejdź do NullableIntValue i ustaw go na 100 (lub cokolwiek) i naciśnij enter, a natychmiast zmienia się na 1.

To wydaje się zachowywać w ten sposób dla właściwości, tj. Jeśli zmienię wartość TestItem.NullableIntValue na zmienną zamiast właściwość, która działa dobrze. A jeśli przypiszę wartość do NullableIntValue w kodzie i pozwól jej działać, wydaje się, że nie ma problemu, po prostu nie podczas przerwy w debugowaniu.

Uwaga, również wypróbowany w VS 2013 i wykonuje zadanie w porządku, więc wydaje się ograniczony do VS 2015, a ja próbowałem zarówno C# 6 i C# 5, dzieje się na obu.

Jakieś pomysły, które mogą być przyczyną?

+0

Próbowałem go na moim komputerze i nie mogłem odtworzyć problemu. Wygraj 10, Visual Studio 2012, zainstalowałem ostatnią noc najnowszą aktualizację VS. Czy twój VS2015 jest w pełni załatany? – Christoph

+0

'partial testItem klasy?" Czy jest gdzieś dodatkowy kod? – theB

+3

Widzę to, jest to błąd debuggera. Niezbyt zaskakujące, w przeszłości miało wiele problemów z niwelowaniem. Możesz użyć Narzędzia> Opcje> Debugowanie> Ogólne> Użyj trybu zarządzanej zgodności jako obejścia, ale nie jest to bardzo dobry. Możesz zgłosić błąd na connect.microsoft.com –

Odpowiedz

2

Jest to znany błąd programu Visual Studio 2015 RTM. Naprawiliśmy to w Visual Studio Update 1. Zasadniczo rozłożenie złożonych typów wartości (takich jak zerowanie) z debuggera na proces debugowania zostało zerwane. Jeśli nie chcesz instalować Aktualizacji 1, możesz obejść ją, przechodząc do Debugowania -> Opcje -> Ogólne i sprawdzając "Używaj starszych C# i VB Expression Evaluators".

+0

Dzięki za aktualizację @Patrick Nelson - MSFT! – Mike

Powiązane problemy