2016-01-06 11 views
6

यह जांचने का सबसे अच्छा तरीका क्या है कि केवल ए शून्य है या केवल बी शून्य है? मैं कुछ है कि साफ महसूस करता है खोजने के लिए कई अलग अलग तरीकों कोशिश कर रहे हैं, और यह कि यह कैसे जटिल हो गया है है:मैं कैसे जांच सकता हूं कि एक एक्सोर बी शून्य है या नहीं?

bool CheckForNull(object a, object b) 
{ 
    if(a == null && b == null) 
    { 
     return false; 
    } 
    if(a == null || b == null) 
    { 
     return true; 
    } 
    return false; 
} 

मेरे सबसे अच्छा (और सबसे स्पष्ट) संस्करण है:

bool CheckForNull(object a, object b) 
{ 
    return a == null && b != null || a != null && b == null; 
} 

लेकिन मैं वास्तव में यह पसंद नहीं है। (निश्चित रूप से मैं कोष्ठक जोड़ सकता हूं ...)

क्या ऐसा करने का एक मानक तरीका है जिसे मैंने कभी नहीं सीखा?

उत्तर

14

क्या इस बारे में:

return (a == null) != (b == null); 
1

आप XOR ऑपरेटर

bool CheckForNull(object a, object b) 
{ 
    return (a == null^b == null); 
} 
2

आप की जरूरत/XOR उपयोग करना चाहते हैं इस्तेमाल कर सकते हैं, तो आप इस्तेमाल कर सकते हैं:

return (a == null)^(b == null); 

लेकिन के लिए काम करने के लिए, true को उसी 'मान' का मूल्यांकन करना होगा।

लेकिन इस मामले में, मुझे लगता है कि मैं इसे यथासंभव सरल रखूंगा। आपका दूसरा संस्करण तो वास्तव में बुरा लग रहा है नहीं:

return a == null && b != null || a != null && b == null; 

और वहाँ एक जल्दी बाहर निकलने के की संभावना है। (और यदि भाग्यशाली है, तो संकलक इसे समांतर (निर्देश पाइपलाइनिंग) में निष्पादित करने के लिए अनुकूलित भी कर सकता है)।

+0

सच है एक ही मूल्य का मूल्यांकन करना है? वॉच मतलब है? सच कब सत्य के बराबर नहीं है? – Evorlor

+1

@Evorlor भाषा के आधार पर, जो भी शून्य नहीं है, वह सत्य का मूल्यांकन कर सकता है (0 झूठा है, बाकी सब सच है)। तो यदि आपका बायां 'सत्य' 1 है और सही 2 है, तो xor अपेक्षा के अनुसार काम नहीं करेगा। –

संबंधित मुद्दे

 संबंधित मुद्दे