2012-12-18 23 views
14

:Bir bool değerini null edilebilen çok sayıda boole nasıl iade edebilirim? Bu kod ile

private bool AtLeastOnePlatypusChecked() 
{ 
    return ((ckbx1.IsChecked) || 
      (ckbx2.IsChecked) || 
      (ckbx3.IsChecked) || 
      (ckbx4.IsChecked)); 
} 

... Ben bunu gerçekleştirmek nasıl Yani

Operator '||' cannot be applied to operands of type 'bool?' and 'bool? 

ile benim parça ölü durdu ediyorum?

+0

Bu durumda, dört. –

+1

http://www.merriam-webster.com/dictionary/plethora –

cevap

31

yapabilirsiniz zincir birlikte | s, sonunda null coalescing operatörünü kullanarak:

return (ckbx1.IsChecked | cxbx2.IsChecked | cxbx3.IsChecked | cxbx4.IsChecked) ?? false; 

Kaldırılan | operatörü eith ise true döndürür her iki işleneni false ve null ise ve eğer işlenen null ise ve diğeri true değilse, er işlenen true, false'dur.

Bu kısa devre değil, ancak bu durumda sizin için bir sorun olacağını düşünmüyorum.

Alternatif olarak - ve daha fazla genişletilebilir - onay kutularını bir çeşit koleksiyona koyun. Sonra sadece kullanabilirsiniz:

return checkboxes.Any(cb => cb.IsChecked ?? false); 
+0

Son olarak, "kaldırılmış" ın ne anlama geldiğini biliyorum. İfade ağaçları ile çalışırken bu terimle karşılaştım. –

+0

Ben de bu terimi merak ettim, ama [Jon zaten bu soruyu yanıtladı] gibi görünüyor (http://stackoverflow.com/questions/3370110/what-are-lifted-operators) –

+0

Bunun için tekrar oy verdim . Vay bu seksi. –

4

Aşağıdaki sayfada:

(ckbx1.IsChecked.HasValue && ckbx1.IsChecked.Value) 
+0

Her nasılsa bu "daha iyi hissettirir" .. –

+2

'||' 've' işleç mi? Eğer cbx1.IsChecked.HasValue '' false' ise, 'ckbx1.IsChecked.Value' alınırken' Null Reference' olacaktır. –

11

Dene:

return ((ckbx1.IsChecked ?? false) || 
     (ckbx2.IsChecked ?? false) || 
     ... 
+0

Darnit, bana onu döv! –

6

ben boş, o zaman yanlış olacak, sen kullanabilirsiniz varsayarak yaşıyorum ?? Şebeke.

private bool AtLeastOnePlatypusChecked() 
{ 
     return ((ckbx1.IsChecked ?? false) || 
     (ckbx2.IsChecked ?? false) || 
     (ckbx3.IsChecked ?? false) || 
     (ckbx4.IsChecked ?? false)); 
} 
2

Yönteminizin içinde ?? işlecini kullanın;

private bool AtLeastOnePlatypusChecked() 
{ 
return ((ckbx1.IsChecked ?? false) || 
     (ckbx2.IsChecked ?? false) || 
     (ckbx3.IsChecked ?? false) || 
     (ckbx4.IsChecked ?? false) 
} 
5

Bu değeri veya false ya almak için GetValueOrDefault() kullanabilirsiniz.

private bool AtLeastOnePlatypusChecked() 
{ 
    return ((ckbx1.IsChecked.GetValueOrDefault()) || 
      (ckbx2.IsChecked.GetValueOrDefault()) || 
      (ckbx3.IsChecked.GetValueOrDefault()) || 
      (ckbx4.IsChecked.GetValueOrDefault())); 
} 
İlgili konular