Concat Saiten von & amp; und + in VB.Net
Gibt es einen Unterschied zwischen & und die + - Operatoren, während die Verkettung von string?
wenn ja, dann was ist der Unterschied? Und wenn Nein, warum dann unter code-Generierung Ausnahme?
Beispiel:
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
Kommentar zu dem Problem
Welche Fehler haben Sie?
InvalidCastException
Ich hatte keine Ahnung,
+
war auch eine Verkettung operator in VB. Das ist eines der Dinge, die ich hasse über JavaScript ist, dass +
ist für die concat-und die neben. @Brad: das heißt, hasst du auch C#? Oder ist dieser Hass reserviert nur für "uncool" Sprachen wie VB.NET und JavaScript? Die separate
&
operator ist eines der Dinge, die ich Liebe über VB. Und wenn Sie +
, wenn es eine alternative zur Verfügung, das ist nicht die Sprache ist Schuld, es ist deine Schuld als Programmierer nicht wissen, die Sprache. @Cody, Sie missverstehen, ich weiß nicht wirklich hasse alle Sprachen als ganzes. Ich hasse die Tatsache, dass
+
dient als Verkettungsoperator in einigen Sprachen, und ich mit Hilfe von JavaScript als ein Beispiel, wie das ist, wo ich es am meisten. Ich Stimme Ihnen vollkommen zu, ich Liebe die Tatsache, dass &
ist eine separate concat-operator in VB, und das ist alles, was ich wusste noch gar nicht existierte als eine concat-operator in VB, bis jetzt. VB ist meine primäre Sprache für desktop-Anwendungen. InformationsquelleAutor der Frage Javed Akram | 2011-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
& und + sind beide Verkettung Betreiber, aber wenn Sie geben Sie eine ganze Zahl, während die mit +, vb.net versucht den cast von "Hallo" in integer zu tun, ist eine Zugabe. Wenn Sie "Hallo" mit "123", erhalten Sie das Ergebnis 124.
InformationsquelleAutor der Antwort N. Hodin
&
ist nur für string-Verkettung.+
überlastet ist zu tun, sowohl string-Verkettung und die arithmetische addition.Den doppelten Zweck der
+
führt zu Verwirrung, genau wie in deiner Frage. Vor allem, wennOption Strict
istOff
, weil der compiler hinzufügen impliziten casts auf Ihre strings und zahlen, um zu versuchen, den Sinn von deinem code.Meine Empfehlungen
Option Strict On
, und der compiler wird Sie zwingen, hinzufügen von expliziten casts, wo es denkt, dass Sie notwendig sind.+
für die Verkettung aufgrund der Mehrdeutigkeit bei der arithmetischen addition.Diese beiden Empfehlungen sind auch in der Microsoft Press-Buch Praktische Leitlinien Und die Besten Praktiken für VB und C# (§1.16, 21.2)
InformationsquelleAutor der Antwort MarkJ
Wahrscheinlich hast du schon Option Strict aktiviert ist (was eine gute Sache ist), und der compiler sagt Ihnen, dass Sie können nicht fügen Sie einen string und einen int. Versuchen Sie dies:
t = s1 & i.ToString()
InformationsquelleAutor der Antwort Chris B. Behrens
Ihre Frage bestätigt, Sie sind anders:
&
ist NUR die string-Verkettung,+
überlastet ist mit der normalen addition und Verkettung.In deinem Beispiel:
weil einer der Operanden in
+
ist ein integer, der VB versucht, konvertieren Sie die Zeichenfolge in eine ganze Zahl, und da der string nicht numerisch ist, es wirft; und&
funktioniert nur mit strings, also die ganze Zahl wird in einen string umgewandelt.InformationsquelleAutor der Antwort Mark Hurd
Schreiben Sie '&' hinzufügen zu string und integer :
Ausgabe:
InformationsquelleAutor der Antwort Shubham Verma
Vom ehemaligen, string concatenater (sp?) Sie sollten sich wirklich überlegen, die Verwendung von Zeichenfolgen.Format anstelle der Verkettung.
Es macht die Dinge viel einfacher zu Lesen und zu verwalten, und ich glaube, dass macht den code professioneller Aussehen. Siehe: code besser – string verwenden.format. Obwohl nicht jeder damit einverstanden Wann ist es besser, verwenden Sie String.Format vs string-Verkettung?
InformationsquelleAutor der Antwort Buck Hicks
Meine 2 Cent:
Wenn Sie die Verkettung einer signifikanten Menge von Zeichenfolgen, die Sie sollten mit den StringBuilder statt. IMO es ist sauberer und deutlich schneller.
InformationsquelleAutor der Antwort Alex7575