2013-05-02 4 views
5

मैं एक समारोह है कि निम्नलिखितएक नेस्ट Simplifing यदि बयान

string Foo(bool A, bool B) 
{ 
    if(A) 
    { 
     if(B) 
     { 
      return "W"; 
     } 
     else 
     { 
      return "X"; 
     } 
    } 
    else 
    { 
     if(B) 
     { 
      return "Y"; 
     } 
     else 
     { 
      return "Z"; 
     } 
    } 
} 

की तरह है डबल नेस्टिंग बस मुझे गलत लगता है कि है। क्या इस पैटर्न को लागू करने का कोई बेहतर तरीका है?


मदद करने के लिए सभी को धन्यवाद, मैं ट्राइनरी मार्ग के साथ जा रहा हूं। यह इस बारी में मदद की: करने के लिए

if (female) 
{ 
    if (nutered) 
    { 
     destRow["TargetSex"] = "FS"; 
    } 
    else 
    { 
     destRow["TargetSex"] = "F"; 
    } 
} 
else 
{ 
    if (nutered) 
    { 
     destRow["TargetSex"] = "MN"; 
    } 
    else 
    { 
     destRow["TargetSex"] = "M"; 
    } 
} 

इस

destRow["TargetSex"] = female ? (nutered ? "FS" : "F") 
           : (nutered ? "MN" : "M"); 
+0

हमेशा 'if (ए && बी) {} और यदि (बी) {} अन्य {} ' –

+0

@ डेविडस्टर्की 4 संभावित परिणाम राज्य हैं, आप केवल 3. –

+0

लौटते हैं फिर' if (A && B) {} और यदि (! ए && बी) {} और यदि (बी) {} else {} ' –

उत्तर

10
if (A) 
{ 
    return B ? "W" : "X"; 
} 
return B ? "Y" : "Z"; 

या और भी अधिक संक्षिप्त:

return A ? (B ? "W" : "X") 
     : (B ? "Y" : "Z"); 

अपने विशेष रूप से unnested स्थितियों के लिए जा रहा है:

if (A && B) return "W"; 
if (A && !B) return "X"; 
return B ? "Y" : "Z"; 
+2

'रिटर्न ए' भी कर सकते हैं? (बी? "डब्ल्यू": "एक्स"): (बी? "वाई": "जेड") '। – SimpleVar

+0

@Yorye यह मेरे लिए (व्यक्तिगत रूप से) कुछ पठनीयता खो देता है, और शायद इसे अधिक कर सकता है। – doppelgreener

+2

"यहां तक ​​कि अधिक terse" समाधान वह है जिसे मैं सबसे ज्यादा पसंद करता हूं। –

0

आप चार संभावित राज्य। एक छोटा (हालांकि जरूरी नहीं है कि बनाए रखने के लिए आसान) प्रतिनिधित्व

if (A && B) { 
    return "W"; 
} else if (A && !B) { 
    return "X"; 
} else if (!A && B) { 
    return "Y"; 
else return "Z"; 
3

तर्कसंगत, नहीं। आपके पास दो चर के लिए 4 अलग-अलग स्थितियां हैं।

string Foo(bool A, bool B) 
{ 
    return A ? 
     B ? "W" : "X" 
     : 
     B ? "Y" : "Z"; 

} 

या यदि आप विशेष रूप से बुराई महसूस कर रहे हैं, एक पंक्ति पर डाल नहीं कोष्ठक !:

return A?B?"W":"X":B?"Y":"Z"; 
+0

मैं बेहतर सुसंगतता की तलाश में था, मुझे पता था कि कोई तर्क सरलीकरण नहीं है। –

+1

उन दोनों को सबसे बढ़िया विकल्प के लिए बंधे हैं जिन्हें मैं सोच सकता हूं! क्या आप अपने प्लेड जैकेट के साथ धारीदार संबंध पहनते हैं? उन दो को पोस्ट करने के लिए साहस के लिए +1। –

+0

@PieterGeerkens निष्पक्ष होने के लिए, वह त्रिकोण समाधान पोस्ट करने वाले पहले व्यक्ति थे, स्टीक्स ने बाद में उन्हें एक संपादन के रूप में पोस्ट किया। –

0

मैं के साथ:

आप कोड अधिक संक्षिप्त, हालांकि कर सकते हैं बस इसे मज़ेदार में फेंकना होगा:

string Foo(bool A, bool B) 
    { 
     var labels = new[]{"W", "X", "Y", "Z"}; 
     return labels[(A ? 0 : 2) + (B ? 0 : 1)]; 
    } 
+0

चालाक, जब मैं मूल रूप से ऐसा करने के बेहतर तरीकों के बारे में सोचने की कोशिश कर रहा था, तो मुझे वास्तव में एक समान विचार के बारे में सोचा गया था लेकिन एक सरणी के बजाय स्विच स्टेटमेंट का उपयोग करना :)। –

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