VB.Net

2011-01-12 21 views
21

में और + + द्वारा कंसैट स्ट्रिंग्स & और स्ट्रिंग को संयोजित करते समय ऑपरेटरों के बीच कोई अंतर है? यदि हां, तो क्या अंतर है? और यदि नहीं, तो कोड उत्पन्न अपवाद के नीचे क्यों?VB.Net

उदाहरण:

Dim s, s1, t As String 
    Dim i As Integer 

    s1 = "Hello" 
    i = 1 

    s = s1 & i 
    t = s1 + i //Exception here 

    If s = t Then 
     MessageBox.Show("Equal...") 
    End If 
+0

आपने क्या त्रुटि मिलता है? – SLaks

+0

'अमान्य कैस्टएक्सप्शन ' –

+0

मुझे नहीं पता था कि वी + में एक कॉन्सटेनेशन ऑपरेटर भी था। जावास्क्रिप्ट के बारे में मुझे नफरत करने वाली चीजों में से एक यह है कि '+' संगत और अतिरिक्त के लिए है। – Brad

उत्तर

28

& और + दोनों संयोजन ऑपरेटर हैं, लेकिन जब +, vb.net का उपयोग कर "हैलो" कास्ट करने के लिए पूर्णांक में एक अतिरिक्त करने की कोशिश करता है जब आप एक पूर्णांक निर्दिष्ट करें। आप "123" के साथ "हैलो" बदलते हैं, तो परिणाम 124

4

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

t = s1 & i.ToString()

+1

क्रिस, त्रुटि कोड की दूसरी पंक्ति में है। –

+1

यह वही समस्या है, दूसरी तरफ ... यह एस 1 को एक int और विफल करने के लिए डालने की कोशिश कर रहा है। इसे ठीक करने के लिए, पहली पंक्ति का उपयोग करें, न कि दूसरे। –

+1

दुख की बात है कि मुझे लगता है कि यह गलत है। विकल्प सख्त बंद होना चाहिए अन्यथा यह संकलित नहीं होगा, रनटाइम अपवादों को कभी भी ध्यान न दें। मेरी सलाह विकल्प सख्त चालू करना होगा और उसके बाद संकलित त्रुटियों के साथ संकलक त्रुटियों को ठीक करना होगा। – MarkJ

2

अपने प्रश्न की पुष्टि के रूप में मिल जाएगा, वे अलग हैं: & केवल स्ट्रिंग संयोजन है, + दोनों सामान्य अलावा और संयोजन के साथ ओवरलोड हो गया है।

अपने उदाहरण में:

  • क्योंकि + को ऑपरेंड में से एक एक पूर्णांक वीबी एक पूर्णांक के लिए स्ट्रिंग परिवर्तित करने के लिए प्रयास करता है, और यह फेंकता के रूप में अपने स्ट्रिंग सांख्यिक नहीं है, और

  • & केवल तारों के साथ काम करता है ताकि पूर्णांक को स्ट्रिंग में परिवर्तित किया जा सके।

-1

एक पूर्व स्ट्रिंग concatenater (एसपी?) से तुम सच में संयोजन के बजाय String.Format उपयोग करने पर विचार करना चाहिए।

Dim s1 As String 
    Dim i As Integer 
    s1 = "Hello" 
    i = 1 
    String.Format("{0} {1}", s1, i) 

यह चीजों को पढ़ने और बनाए रखने के लिए बहुत आसान बनाता है और मेरा मानना ​​है कि आपका कोड अधिक पेशेवर दिखता है। देखें: code better – use string.format। हालांकि सभी When is it better to use String.Format vs string concatenation?

+2

सिंगल लाइन स्ट्रिंग कॉन्सटेनेशन आमतौर पर 'स्ट्रिंग.फॉर्मैट 'को कॉल करने से * तेज * होता है। हमेशा एक दूसरे के ऊपर उपयोग करने के लिए कोई सलाह गलत है, और यह कोई अपवाद नहीं है। कंपाइलर अनुकूलन का लाभ उठाएं। "अपना कोड अधिक पेशेवर दिखने" के लिए कुछ करने का यह विचार बेवकूफ है। यही वह चीज है जो सी ++ का उपयोग करके औचित्य देती है जब आपका कार्य गतिशील स्क्रिप्टिंग भाषा के साथ बहुत आसान बना दिया जाता है क्योंकि ओह, यह सिर्फ "गैर-व्यावसायिक" दिखता है। व्यावसायिक सॉफ्टवेयर सामान है जो * काम करता है * ... अच्छा। उपस्थिति अप्रासंगिक है। आपके द्वारा लिंक किए गए प्रश्न में उत्तर इस बात की पुष्टि करने के लिए प्रकट होते हैं। –

19
  • & केवल स्ट्रिंग कॉन्सटेनेशन के लिए उपयोग किया जाता है।
  • + दोनों स्ट्रिंग concatenation और अंकगणितीय जोड़ करने के लिए अधिभारित है।

+ का डबल उद्देश्य भ्रम की ओर जाता है, ठीक उसी तरह आपके प्रश्न में। विशेष रूप से जब Option StrictOff है, क्योंकि संकलक आपके कोड को समझने के लिए अपने तारों और पूर्णांक पर अंतर्निहित उत्सव जोड़ देगा।

मेरे सिफारिशों

  • आप निश्चित रूप से Option Strict On कर देना चाहिए, तो संकलक जहां यह सोचता है कि वे जरूरी हैं स्पष्ट डाले जोड़ने के लिए बाध्य करेगा।
  • अंकगणितीय जोड़ के साथ अस्पष्टता के कारण आपको + का उपयोग करने से बचना चाहिए।

इन दोनों सिफारिशों माइक्रोसॉफ्ट प्रेस पुस्तक में भी कर रहे हैं Practical Guidelines And Best Practises for VB and C# (वर्गों 1.16, 21.2)

-1

मेरे 2 सेंट:

आप तार का एक महत्वपूर्ण राशि श्रृंखलाबद्ध रहे हैं, तो आप का उपयोग करना चाहिए इसके बजाय स्ट्रिंगबिल्डर। आईएमओ यह क्लीनर है, और उल्लेखनीय तेज

+0

ए 'स्ट्रिंगबिल्डर' * इस मामले में मदद करने के लिए नहीं जा रहा है। जब आप (लगभग) 4 जोड़ों से कम से कम व्यवहार कर रहे हैं, तो 'स्ट्रिंगबिल्डर' का ऊपरी भाग आमतौर पर इसके लायक नहीं है। पूछताछ एक लूप में तारों को जोड़ नहीं रहा है, इसलिए कोई बात नहीं है। सिफारिशें करने से पहले, समझें कि आप वास्तव में क्या कर रहे हैं * क्या * और वे कैसे काम करते हैं। कार्गो-पंथ प्रोग्रामिंग दिनचर्या डुबोएं। –

+1

"यदि आप स्ट्रिंग्स की एक महत्वपूर्ण मात्रा को जोड़ रहे हैं" – Alex7575

+1

@ कोडी इसे आसान, दोस्त लेते हैं। यहां कोई भी चोट नहीं पहुंचा रहा है। – Will

0

आप लिख सकते हैं '&' जोड़ने के लिए स्ट्रिंग और पूर्णांक:

processDetails=objProcess.ProcessId & ":" & objProcess.name 
message = msgbox(processDetails,16,"Details") 

उत्पादन होगा:

5577:wscript.exe