2012-12-18 49 views
14

इस कोड के साथ:मैं निरर्थक बूलों से एक बूल वैल्यू कैसे वापस कर सकता हूं?

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

... मैं

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

तो मैं यह कैसे पूरा करते हैं के साथ अपने पटरियों में मृत बंद कर दिया कर रहा हूँ?

+0

इस मामले में, चार। –

+1

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

उत्तर

31

आप कर सकते हैं श्रृंखला एक साथ | है, अंत में अशक्त-कोलेसिंग ऑपरेटर का उपयोग:

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

उठाया | ऑपरेटर true देता है अगर ईथ er operand true, false यदि दोनों ऑपरेटरों false हैं, और null यदि कोई ऑपरेंड null है और दूसरा true नहीं है।

यह शॉर्ट-सर्किटिंग नहीं है, लेकिन मुझे नहीं लगता कि इस मामले में आपके लिए समस्या होगी।

वैकल्पिक रूप से - और अधिक व्यापक रूप से - चेकबॉक्स को किसी प्रकार के संग्रह में डाल दें। तो फिर तुम बस का उपयोग कर सकते हैं:

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

अंत में मुझे पता है कि "उठाया" क्या मतलब है। अभिव्यक्ति पेड़ों के साथ काम करते समय मुझे इस शब्द का सामना करना पड़ा। –

+0

मैं उस शब्द के बारे में भी उत्सुक था, लेकिन ऐसा लगता है कि [जॉन ने पहले से ही उस प्रश्न का उत्तर दिया है] (http://stackoverflow.com/questions/3370110/what-are-lifted-operators) –

+0

मैंने इसके लिए फिर से मतदान किया है । वाह वह सेक्सी है। –

4

आप उपयोग कर सकते हैं निम्नलिखित:

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

किसी भी तरह यह "महसूस करता है" अच्छा .. –

+2

'' '' '' '' '' '' '' '' '' '' 'होना चाहिए? यदि 'cbx1.Ischecked.HasValue'' false' है तो 'ckbx1 प्राप्त होने पर 'शून्य संदर्भ' होगा। Ichecheed.Value'। –

11

प्रयास करें:

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

डारिटिट, मुझे इसे हराया! –

6

मैं यह सोचते हैं रहा है कि अगर शून्य है, तो यह गलत हो जाएगा, तो आप उपयोग कर सकते हैं ?? ऑपरेटर।

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

अपनी विधि के अंदर ?? ऑपरेटर का उपयोग करें;

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

आप GetValueOrDefault() का उपयोग या तो मूल्य, या false प्राप्त करने के लिए कर सकते हैं।

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