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ą?
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
'partial testItem klasy?" Czy jest gdzieś dodatkowy kod? – theB
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 –