2016-01-06 22 views
6

Yalnızca A'nın boş olup olmadığını veya yalnızca B'nin boş olup olmadığını kontrol etmenin en iyi yolu nedir? Temiz hissediyor şey bulmak için birçok farklı yol çalışıyorlar ve bu da kazanılmış nasıl convoluted:A xor B'nin boş olup olmadığını nasıl kontrol edebilirim?

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

Benim en iyi (ve en açık) versiyonu:

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

Ama bunu da sevmiyorum. (Parantez ekleyebilirim ...)

Bunu hiç öğrenemediğim standart bir yol var mı?

cevap

14

bu konuda ne:

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

Sen xor operatörü

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

Eğer xor kullanmak istiyorum/gerekiyorsa kullanabilirsiniz şunu kullanabilirsiniz:

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

ama için Çalışmak için, true aynı 'değere' değerlendirmek zorunda.

Ancak bu durumda, olabildiğince basit tutmayı düşünüyorum.

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

ve erken çıkmak bir olasılık var: Sizin ikinci versiyonu aslında o kadar kötü görünmüyor. (ve eğer şanslıysa, derleyici bunu paralel olarak yürütmek için bile optimize edebilir (talimatlar)).

+0

Doğru aynı değerlendirmeye sahip olmak zorunda mı? Watcha demek? Doğru ne zaman doğru değil? – Evorlor

+1

@Evorlor Dile bağlı olarak, sıfır olmayan her şey doğru olarak değerlendirilebilir (0 yanlıştır, her şey doğrudur). Yani solunuz 'gerçek' 1 ve doğru olan 2 ise, xor beklendiği gibi çalışmayacaktır. –

İlgili konular