2015-09-11 6 views
5

Ich habe ein Problem in einem Projekt, wo ich einen Haltepunkt setzen und mit den Eigenschaften eines Objekts arbeiten, und ich kann keinen Wert auf ein Nullable Int setzen. Ich kann es auf null setzen, aber wenn ich es auf irgendetwas setze, dann überprüfe sofort den Wert, es gibt 1 zurück.Einstellung der Eigenschaft in Immediate Window nicht eingestellt?

Ich sehe das im unmittelbaren Fenster sowie das Inspektionsfenster, das erscheint, wenn Sie den Mauszeiger darüber bewegen ein Objekt, wenn es im Debug-Modus angehalten wurde. Es scheint auch, dass dies keinen Einfluss auf den laufenden Code hat, nur wenn Sie brechen und versuchen, mit den Werten zu spielen.

konnte ich es in einer neuen Konsole Projekt reproduzieren:

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, die in ein neues Konsole-Projekt, und einen Haltepunkt an dem put „myValue.NullableIntValue = 0;“ Linie. Dann führe es aus.

Wenn die Breakpoint-Hits, die sofortigen Fenster öffnen und den Wert festgelegt:

myValue.NullableIntValue = 123; 
123 

Dann den Wert überprüfen:

?myValue.NullableIntValue 
1 

Versuchen Sie es mit etwas anderes:

myValue.NullableIntValue = null 
null 
?myValue.NullableIntValue 
null 

Setzen Sie es auf etwas anderes als Null und es scheint immer 1 zu sein.

Sie können auch den Mauszeiger über die Haltepunktlinie "myValue" bewegen und VS das Popup-Fenster öffnen, in dem Sie alle Werte sehen. Gehe zu NullableIntValue und setze es auf 100 (oder irgendwas) und drücke Enter und es ändert sich sofort zu 1.

Das scheint sich nur so für eine Eigenschaft zu verhalten, dh wenn ich TestItem.NullableIntValue in eine Variable ändere eine Eigenschaft, es funktioniert gut. Und wenn ich dem NullableIntValue einen Wert im Code zuweise und ihn ausführen lasse, scheint es kein Problem zu sein, nur nicht während einer Pause im Debug.

Hinweis, auch dies in VS 2013 versucht und es dauert die Zuweisung ganz gut, so scheint es begrenzt auf VS 2015, und ich versuchte sowohl C# 6 und C# 5, geschieht auf beiden.

Irgendwelche Ideen, was könnte das verursachen?

+0

Ich habe es auf meinem Computer versucht und konnte Ihr Problem nicht reproduzieren. Win 10, Visual Studio 2012, hat letzte Nacht das neueste VS-Update installiert. Ist Ihr VS2015 vollständig gepatcht? – Christoph

+0

'Teilklasse TestItem'? Gibt es dort woanders zusätzlichen Code? – theB

+3

Ich sehe es, das ist ein Debugger-Bug. Es ist nicht besonders überraschend, dass es in der Vergangenheit viele Probleme mit der NULL-Fähigkeit gab. Sie können Tools> Optionen> Debugging> Allgemein> Verwalteten Kompatibilitätsmodus als Workaround verwenden, aber es ist nicht sehr gut. Sie können den Fehler bei connect.microsoft.com melden. –

Antwort

2

Dies ist ein bekannter Fehler in Visual Studio 2015 RTM. Wir haben es in Visual Studio Update 1 behoben. Im Wesentlichen wurde das Rangieren komplexer Werttypen (wie NULL-Werte) vom Debugger zum Debuggee-Prozess unterbrochen. Wenn Sie Update 1 nicht installieren möchten, können Sie es umgehen, indem Sie auf Debug -> Optionen -> Allgemein gehen und die Option "Ältere C# - und VB Expression Evaluatoren verwenden" aktivieren.

+0

Danke für das Update @Patrick Nelson - MSFT! – Mike

Verwandte Themen