1

Bir komutun, bu boole true değerine ayarlı olarak tetiklenmesini önlemek veya izin vermek için bir bool özelliği kurdum.Bool durumunda bir InvalidOperationException nasıl çözümlenir?

Geçerli uygulamada, bool'u true olarak ayarlamadan önce, bool içinde belirli değerlerin boş olmadığını kontrol ediyorum.

Soru:

Neden bool içinde koşuluyla bir InvalidOperationException alabilirim? kod

Genel Bakış:

Bool özelliği CanSendCommand, aşağıdaki Röle komutunda bir parametre olarak kullanılır: sınıf initilization üzerinde bir yük yöntemde ilk olarak adlandırılır

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

    return false; 
} 

TagRequestCommand. Komutun kendisi, UI üzerinde bir düğmeye basmakla sınırlıdır. ? Bağlam RegNumber için

, SelectedParkingDuration tipi dizedir ZamanGeçişi ve SelectedZone.ZoneName bir mülkte bir dizedir: Ben istisna ayrıntıları kopyaladıktan

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

, durum için bana değerleri gösterilmektedir bool durumunda ele alındığında tamam olması gereken null. Görüyorsunuz ki "Nullable nesnesinin bir değere sahip olması gerektiğini" gösteren bir satır var, bu da bana TimesParkDuration öğesinin bir değere sahip olması gerektiğini söyler. Ama bir değer seçilmeden önce nasıl bir değere sahip olabileceğinden emin değilim. çalışma zamanı sırasında otomobil pencerelerin

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: 

Ekran Görüntüsü:

enter image description here

cevap

1

Basit kod: Sadece SelectedParkDuration != null

Daha bilgilerini kontrol edebilirsiniz Null Reference exception, .Net, kullanımın yanlış olduğunu önermek için Invalid Operation Exception'u tercih eder, aksi takdirde değerin Boş olmasını beklerseniz Value property'u kullanmamalısınız.

// Test.SelectedParkDuration = 5; 

Kontrol bu link çok

:

çizgi Yukarıdaki kod çalışma yorumunu çıkarmak için
1

SelectedParkDuration.Value != null benziyor istisna atar parçasıdır. Başka, sen Test.SelectedParkDuration.Value; başarılı olmak istiyorsanız

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

, daha sonra ilk atayın: sizin önerdiğiniz senaryoyu çoğaltmak LINQPad içinde https://msdn.microsoft.com/en-us/library/ydkbatt6(v=vs.110).aspx