2009-08-27 14 views
11

हे सब, मेरे सी # पर कोड को कम करने के लिए देख रहे हैं, यदि बयान के रूप में कई दोहराने वाले कारक हैं और यह सोच रहा था कि एक ट्रिमर समाधान संभव है या नहीं।यदि स्टेटमेंट एकाधिक स्थितियां, एक ही कथन

मेरे पास वर्तमान में 2 है यदि एक समान कथन करने की आवश्यकता वाले बयान हैं, हालांकि चेकबॉक्स चेक नहीं होने पर एकमात्र चर एक if स्टेटमेंट पर अतिरिक्त शर्त है। अगर वहाँ यह एक बयान या हालत स्ट्रिंग चर, कोड उसके बारे में यहां संकुचित संस्करण बनाने के लिए एक रास्ता है मैं बस सोच रहा:

if (checkbox.checked) 
    { 
    if (columnname != a && columnname != b && columnname != c) 
    { 
     "statement 1" 
    } 
    } 
else 
    { 
    if (columnname != a && columnname != b && columnname != c 
     && columnname != A2) 
    { 
     "statement 1" 
    } 
    } 

इसकी तरह मैं अगर एक चलाने की आवश्यकता एक की शर्तों अगर भीतर बयान बयान है कि अगर समझ में आता है, इस छद्म रूप की तरह:

if (columnname != a 
    && columnname != b 
    && columnname != c 
    && if(checkbox.checked{columnname != A2}) 
+0

Btw - टी वह वही उत्तर सी, सी ++ और जावा में काम करता है। –

उत्तर

33
if (columnname != a 
    && columnname != b 
    && columnname != c 
    && (checkbox.checked || columnname != A2)) 
{ 
    "statement 1" 
} 

चाल करना चाहिए।

+3

आमतौर पर जब एक कथन में मेरी शर्तें तीन से अधिक होती हैं, तो मैं इसे स्पष्ट करने के लिए उन्हें एक निजी विधि में निकालता हूं कि यह स्थिति क्या है –

10
if (columnname != a && columnname != b && columnname != c 
     && (columnname != A2 || checkbox.checked)) 
    { 
     "statement 1" 
    } 
0
if (checkbox.checked && columnname != a && columnname != b && columnname != c) 
    { 
     "statement 1" 
    } 
else if (columnname != a && columnname != b && columnname != c 
     && columnname != A2) 
    { 
     "statement 1" 
    } 

थोड़ा सा सरल बनाने का एक तरीका है।

3

यह एक ही नहीं है:

if ((checkbox.checked || columnname != A2) && 
     columnname != a && columnname != b && columnname != c) 
    { 
     "statement 1" 
    } 
2

अगर आपको लगता है इसे और अधिक स्पष्ट है तुम भी ऐसा कर सकता है:

if (columnname != a 
    && columnname != b 
    && columnname != c 
{ 
    if (checkbox.checked || columnname != A2) 
    { 
     "statement 1" 
    } 
} 
1

मैं agileguy लगता है सही जवाब है, लेकिन मैं करना चाहते हैं जोड़ें कि अधिक कठिन परिस्थितियों के लिए समस्या को हल करने के लिए मैं कुछ रणनीतियों को लेता हूं। पहला truth table का उपयोग करना है। यदि आप Google "सत्य तालिका" हैं तो आप सीधे प्रोग्रामिंग और कंप्यूटर विज्ञान से संबंधित कुछ उदाहरणों में भाग लेंगे।

एक और रणनीति जो मैं लेता हूं, विभिन्न स्थितियों के बीच सामान्य तर्क को समाहित करने के लिए एक अज्ञात फ़ंक्शन का उपयोग करना है। यदि ब्लॉक से ठीक पहले इसे बनाएं, तो आवश्यकतानुसार इसका उपयोग करें। ऐसा लगता है कि कोड अधिक पढ़ने योग्य और रखरखाव योग्य है।

6

मैं हमेशा (आप शायद बेहतर के आधार पर नाम के बारे में सोच सकता है कि इन स्तंभों के लिए उपयोग किया जाता है) सार्थक चर में जटिल बूलियन अभिव्यक्ति को अलग करने का प्रयास करें:

bool notColumnsABC = (columnname != a && columnname != b && columnname != c); 
bool notColumnA2OrBoxIsChecked = (columnname != A2 || checkbox.checked); 

if ( notColumnsABC 
    && notColumnA2OrBoxIsChecked) 
    { 
     "statement 1" 
    } 
3

सुंदर पुराने सवाल लेकिन एक और अधिक के लिए इस जाँच जाँच की स्थिति का क्लस्टर तरीका:

private bool IsColumn(string col, params string[] names) => names.Any(n => n == col); 

उपयोग:

private void CheckColumn() 
{ 
    if(!IsColumn(ColName, "Column A", "Column B", "Column C")) 
    { 
    //not A B C column 
    } 

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