1

Ich habe eine bool-Eigenschaft eingerichtet, um zu verhindern oder zu erlauben, dass ein Befehl ausgelöst wird, basierend darauf, dass bool auf true gesetzt ist.Wie kann eine InvalidOperationException bei Bool-Bedingung behoben werden?

In der aktuellen Implementierung überprüfe ich innerhalb der Bool, dass bestimmte Werte nicht Null sind, bevor Sie die Bool auf True setzen.

Frage:

Warum erhalte ich eine InvalidOperationException über den Zustand innerhalb des Bool?

Übersicht Code:

Bool Eigenschaft CanSendCommand, die im Folgenden als param im Relay-Befehl verwendet wird:

private bool CanSendCommand() 
{ 
    if (SelectedParkDuration.Value != null && RegNumber != string.Empty && SelectedZone.ZoneName != null) 
    { 
     return true; 
    } 

    return false; 
} 

TagRequestCommand, die zunächst in einer Load-Methode auf Klasse initilization genannt wird. Der Befehl selbst ist an einen Tastendruck auf der Benutzeroberfläche gebunden.

Für Kontext RegNumber ist Typ string, SelectedParkingDuration ist Span und SelectedZone.ZoneName ist eine Zeichenfolge innerhalb einer Eigenschaft:

private void LoadCommands() 
    { 
     TagRequestCommand = new RelayCommand(async() => 
     { 
      await SendParkingTagSMSRequest(); 
     } ,CanSendCommand); 
    } 

ich die Ausnahmedetails kopiert haben, die mir die Werte für den Zustand erzählt sind null, was okay sein sollte, da es im bool-Zustand gehandhabt wird. Ich sehe dann, dass es eine Linie gibt, die auf ein "Nullable-Objekt muss einen Wert haben" zeigt, der mir sagt, dass meine Zeitspannen-Eigenschaft SelectedParkDuration einen Wert haben sollte. Aber ich bin mir nicht sicher, wie es einen Wert haben kann, bevor ein Wert ausgewählt wurde.

System.InvalidOperationException was unhandled by user code 
    HResult=-2146233079 
    Message=Nullable object must have a value. 
    Source=mscorlib 
    StackTrace: 
     at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) 
     at System.Nullable`1.get_Value() 
     at Parking_Tag_Picker_WRT.ViewModel.TagRequestViewModel.CanSendCommand() 
    InnerException: 

Screenshot der Autos Fenster während der Laufzeit:

enter image description here

Antwort

1

einfachen Code in LINQPad das Szenario, das Sie vorgeschlagen haben, zu reproduzieren:

void Main() 
{ 
    // Test.SelectedParkDuration = 5; 

    var result = Test.SelectedParkDuration.Value; // Invalid operation exception with above line commented out 

    result.Dump(); 
} 

public class Test 
{ 
    public static int? SelectedParkDuration { get; set;} 
} 

wenn Sie Test.SelectedParkDuration.Value; erfolgreich sein wollen, dann zuerst zuweisen, es anders wird Null Reference exception, .Net bevorzugt Invalid Operation Exception zu schlagen, dass die Verwendung falsch ist, sonst, wenn Sie Wert erwarten, Null zu sein, dann sollten Sie nicht die Value property verwenden.

// Test.SelectedParkDuration = 5; 

prüft diese link zu

:

Um obigen Code Arbeit Kommentar aus der Zeile zu machen

Verwandte Themen