2012-01-20 33 views
5

के लिए सरल "यदि शामिल है" कथन के प्रत्येक भिन्नता को लिखने से कैसे बचें उदाहरण के लिए यदि कंप्यूटर भागों के लिए सामग्री सूची से कई अलग-अलग भाग संख्याओं से भरा टेक्स्टबॉक्स में, मुझे केवल एक प्रकार का cat5 केबल चाहिए किसी भी समय, और यदि उपयोगकर्ता को चेतावनी देने के लिए दो अलग-अलग प्रकार दिखाई देते हैं। Cat5 केबल भाग संख्या हो सकती है: cat5PART # 1, cat5PART # 2, और cat5PART # 3। तो अगर केवल एक cat5 भाग संख्या को कोई चिंता नहीं दिखाई देती है, लेकिन चेतावनी के लिए, जैसे ही दो अलग-अलग प्रकार या अधिक दिखाई देते हैं। मैं आसानी से प्रत्येक भिन्नता के लिए इसे तीन अलग-अलग बार लिख सकता हूं, लेकिन भागों की एक बड़ी सूची में, इसमें अधिक समय लगेगा और गलतियों का जोखिम होगा। इसके अलावा मुझे यह जानना अच्छा लगेगा कि प्रोग्रामर इस प्रकार के फ़ंक्शन को कैसे संभालते हैं। मुझे यह भी नहीं पता कि इसे क्या कहा जाता है, इसलिए मुझे यकीन नहीं है कि इसके लिए Google कैसे करें, यह जानने के बावजूद कि इस सटीक स्थिति के लिए कई समाधान होने जा रहे हैं, इसलिए फोरम पर लोगों को बग करने के लिए निराशा होती है कुछ इतना आसान है।विभिन्न स्ट्रिंग्स

मेरे कोड का एक उदाहरण जो स्पष्ट रूप से काम नहीं करता है क्योंकि यह केवल चेतावनी देगा कि सभी तीन हिस्सों का पता नहीं चला है, अगर दो का पता चला है तो नीचे दिया गया है। मुझे लगता है कि मैं & के कुछ बदलाव का उपयोग करूंगा और | या शायद यह कुछ अलग है?

असल में मैं नहीं चाहता कि है करने के लिए एक बड़े पैमाने पर लिखने के लिए भाग 1 और भाग होता है

अगर 2

अगर भाग 1 और भाग होता है चाहता हूँ 3

अगर भाग 2 में शामिल है और भाग 3

धन्यवाद।

if ((textBox2.Text.Contains("PART#1")) 
     && (textBox2.Text.Contains("PART#2")) 
     && (textBox2.Text.Contains("PART#3"))) 
       { 
      MessageBox.Show("2 types of cat5 part numbers seen at the same time"); 
       } 
+0

यह निश्चित रूप से आपकी सहायता नहीं कर रहा है कि आप अनावश्यक कोष्ठक में अपने उप-अभिव्यक्तियों को लपेट रहे हैं। – ChaosPandion

+1

... लेकिन यह निश्चित रूप से चोट नहीं पहुंचा रहा है, इसलिए मैं नहीं देख सकता कि यह प्रश्न के लिए प्रासंगिक कैसे है। –

+0

मैंने ब्रांड्स को हटाने की कोशिश की और मुझे त्रुटियां मिल गईं, क्या आप मुझे समझने में मदद कर सकते हैं कि मुझे कौन से हटाए जा रहे हैं, इसलिए मुझे पता चलेगा? कोड को पढ़ने में बेहतर आसानी के लिए भी यह है, या जब आपके पास बड़े पैमाने पर कम कोष्ठक होता है तो यह प्रदर्शन में सुधार करता है?Thx – Saintjah

उत्तर

6

आप इस कोशिश कर सकते हैं:

string[] parts = new [] {"PART#1", "PART#2", "PART#3"}; 
int count = parts.Count(s => textBox2.Text.Contains(s)); 
if (count >= 2) ... 
+0

आपके और टूटा ग्लास के लिए बड़ा धन्यवाद, अब यह बहुत समझ में आता है। मुझे बॉक्स के बाहर और सोचने की ज़रूरत है। – Saintjah

4

आप Linq/Count() का उपयोग परीक्षण करने के लिए कर सकते हैं परीक्षण करने के लिए textBox2.Text में निहित हैं चाहते हैं तो कम से कम एक्स तार:

string[] parts = { "PART#1", "PART#2", "PART#3" }; 
if(parts.Count(s=> textBox2.Text.Contains(s)) >= 2) 
{ 
    MessageBox.Show("2 types of cat5 part numbers seen at the same time"); 
} 
0

एक foreach के साथ प्रत्येक के माध्यम से एक List<string> करने के लिए प्रत्येक स्ट्रिंग जोड़ें और फिर पुनरावृति बयान।

1

अनिवार्य रूप से इस समस्या को थोड़ा अलग बातें डिजाइन द्वारा हल किया जाता है।

जो आप वास्तव में चाहते हैं वह कुछ इनपुट पर कुछ प्रकार के नियम सत्यापन को चलाने के लिए है, इसलिए मैं शायद कुछ और सामान्य बनाउंगा, और फिर प्रत्येक नियम में गुणों का एक अच्छा सेट होगा जो वह चाहता है के लिए जाँचे। फिर आप डेटा को संसाधित करने के एक सामान्य प्रकार के 'रन नियमों के नियम' चरण से कॉल करेंगे।

यह थोड़ा अधिक ऊपर लगता है, शायद, लेकिन आम तौर पर इस तरह की चीजें करना अच्छा लगता है ताकि आप परिवर्तनों के लिए तैयार हों।

अंत में (विशिष्ट नियम में) आप स्पष्ट रूप से आपके जैसे कार्यान्वयन को थोड़ा सा करेंगे, लेकिन शायद ब्रोकनग्लस ने दिखाए गए एक छोटे से तरीके से लिखा है।

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