Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s AsString=<a>Hello
World</a>.Value
Denken Sie daran, dass Sie bei Sonderzeichen einen CDATA-Block verwenden sollten:
Dim s AsString=<![CDATA[Hello
World & Space]]>.Value
UPDATE 2015:
Mehrzeilige Zeichenfolgenliterale wurden in Visual Basic 14 (in Visual Studio 2015 ) eingeführt. Das obige Beispiel kann nun wie folgt geschrieben werden:
Dim s AsString="Hello
World & Space"
MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.
Wie können Sie dort Variablen ersetzen? wie "a =" & someint & ","
Christopher Mahan
1
@Christopher - Ich finde es normalerweise besser lesbar, Token in die String-Konstante einzufügen und sie dann zu ersetzen. So s="... a=~someint~ ..."und dann s=s.Replace("~someint~', SomeInt).
Herb Caudill
Dies scheint bei der dynamischen Kompilierung nicht zu funktionieren: CodeDomProvider.CreateProvider ("VisualBasic"). CompileAssemblyFromFile (<Optionen>, <.vb-Datei mit der obigen Tricksyntax>) ... Irgendwelche Ideen? Ist das nur syntaktischer Zucker von VS 2010?
Chad
1
@romkyns Nicht wahr, ich habe herausgefunden, wie man CDATA verwendet und trotzdem mit <% =%> einbetten kann. Siehe hier
Nelson
1
Genial! Wie können Sie den Codeeinzug beibehalten, ohne ihn unter der neueren Syntax in das Literal einzufügen?
Panzercrisis
50
VB.Net hat keine solche Funktion und wird es auch nicht in Visual Studio 2010. Das Feature kommt , dass jirwin wird beziehe wird impliziter Zeilenfortsetzungs genannt. Es hat mit dem Entfernen des _ aus einer mehrzeiligen Anweisung oder einem mehrzeiligen Ausdruck zu tun. Dadurch entfällt die Notwendigkeit, eine mehrzeilige Zeichenfolge mit _ zu beenden. In VB ist jedoch noch kein mehrzeiliges Zeichenfolgenliteral vorhanden.
Wie funktioniert es dann für XML-Literale? Entweder ist es möglich, oder XML-Literale verwenden eine andere Technik - und wenn eine andere Technik, dann eine, die auf mehrzeilige Zeichenfolgen erweitert werden könnte.
Mellamokb
1
@mellamokb XML-Literale sind .. speziell für das Fehlen eines besseren Wortes. Der Compiler versteht sie und ermöglicht es ihnen daher, mehrere Zeilen implizit zu überspannen. Für mehrzeilige Zeichenfolgen wurde keine solche Unterstützung hinzugefügt. Das Hinzufügen einer solchen Unterstützung ist viel einfacher als XML-Literale, es hat die Messlatte für diese Version einfach nicht erreicht.
JaredPar
38
Ich habe diese Variante verwendet:
Dim query AsString=<![CDATA[SELECT
a.QuestionID
FROM
CR_Answers a
INNER JOIN
CR_Class c ON c.ClassID = a.ClassID
INNER JOIN
CR_Questions q ON q.QuestionID = a.QuestionID
WHERE
a.CourseID =1AND
c.ActionPlan =1AND q.Q_Year ='11/12'AND q.Q_Term <=(SELECT CurrentTerm FROM CR_Current_Term)]]>.Value()
Mehrzeilige Zeichenfolgen sind seit Visual Studio 2015 verfügbar.
Dim sql AsString="
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Sie können sie mit Zeichenfolgeninterpolation kombinieren , um die Nützlichkeit zu maximieren:
Dim primaryKey AsString="ID"Dim inventoryTable AsString="inventory"Dim sql AsString=$"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Beachten Sie, dass interpolierte Strings beginnen mit , $und Sie müssen kümmern ", {und }enthalten innen - wandeln sie in "", {{oder}} sind.
Hier sehen Sie die tatsächliche Syntaxhervorhebung interpolierter Teile des obigen Codebeispiels:
Wenn Sie sich fragen, ob ihre Erkennung durch den Visual Studio-Editor auch mit Refactoring funktioniert (z. B. Massenumbenennung der Variablen), dann haben Sie Recht, Code Refactoring funktioniert mit diesen. Ganz zu schweigen davon, dass sie auch IntelliSense, Referenzzählung oder Code-Analyse unterstützen.
VB-Zeichenfolgen sind jetzt im Grunde die gleichen wie wörtliche C # -Strings - sie unterstützen keine Backslash-Escape-Sequenzen wie \ n und erlauben Zeilenumbrüche innerhalb des Strings, und Sie maskieren das Anführungszeichen mit doppelten Anführungszeichen ""
Vielen Dank, Lucian, dass Sie dem VB mehrzeilige Zeichenfolgen hinzugefügt haben. Vielleicht können Sie Ihre Antwort aktualisieren, da VS 2015 jetzt RTM ist. Und vielleicht können Sie auch jemanden in Ihrem Unternehmen anstupsen , um den zugehörigen MSDN-Artikel zu aktualisieren .
Miroxlav
14
Dies war ein wirklich hilfreicher Artikel für mich, aber niemand erwähnte, wie man verkettet wenn man einige Variablen senden möchte, was in 99% der Fälle erforderlich ist.
... <% = Variable %> ...
So geht's:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
In diesem Fall möchten Sie eine Verkettung vermeiden und stattdessen SQL-Parameter verwenden, da diese besser gegen SQL-Injection-Angriffe geschützt sind. Ich kann jedoch sehen, dass dies für die dynamische SQL-Generierung nützlich ist (ohne Benutzereingaben weiterzugeben).
Chad Levy
10
Nun, da Sie auf Ihrer Python zu sein scheinen, kann ich vorschlagen, dass Sie Ihren Text in Python kopieren, wie:
s="""this is gonna
last quite a
few lines"""
dann mache ein:
for i in s.split('\n'):
print 'mySB.AppendLine("%s")' % i# mySB.AppendLine("this is gonna")# mySB.AppendLine("last quite a")# mySB.AppendLine("few lines")
dann können Sie das zumindest kopieren und in Ihren VB-Code einfügen. Bonuspunkte, wenn Sie einen Hotkey binden (am schnellsten mit: Autohotkey ), um dies für alles zu tun, was sich in Ihrem Einfügepuffer befindet. Die gleiche Idee funktioniert gut für einen SQL-Formatierer.
Mehrzeilige Zeichenfolgenliterale in vb.net mithilfe der XElement-Klasse.
Imports System.Xml.Linq
PublicSub Test()dim sOderBy asstring=""dim xe as XElement =<SQL>SELECT* FROM <%= sTableName %><ORDER_BY> ORDER BY <%= sOrderBy %></ORDER_BY></SQL>'** conditionally remove a section if sOrderBy.Length =0then xe.<ORDER BY>.Remove
'** convert XElement value to a string dim sSQL asString= xe.Value
EndSub
Für mich ist das das nervigste an VB als Sprache. Im Ernst, ich habe einmal den String in eine Datei geschrieben und Code geschrieben in der Art von:
Dim s asString= file_get_contents("filename.txt")
Nur damit ich die Abfrage direkt auf dem SQL Server testen kann, wenn ich muss.
Meine derzeitige Methode besteht darin, eine gespeicherte Prozedur auf dem SQL Server zu verwenden und diese einfach aufzurufen, damit ich Parameter an die Abfrage usw. Übergeben kann
Ich habe herausgefunden, wie man sowohl <! [CDATA [als auch <% = für Variablen verwendet, damit Sie ohne Sorgen codieren können.
Grundsätzlich müssen Sie die CDATA-Tags vor der VB-Variablen beenden und anschließend erneut hinzufügen, damit die CDATA den VB-Code nicht erfasst. Sie müssen den gesamten Codeblock in ein Tag einschließen, da Sie mehrere CDATA-Blöcke haben.
Dim script AsString=<code><![CDATA[<script type="text/javascript">
var URL =']]><%= domain %><![CDATA[/mypage.html';</script>]]></code>.value
Sie benötigen _ am Zeilenende für jede "Zeile ..", die hässlich aussieht.
Kenji Noguchi
2
Eigentlich nicht. Spätere Versionen von VB (2010 und später, glaube ich?) Erfordern in vielen Fällen kein _, einschließlich des hier gezeigten Beispiels.
Darryl
2
Sie können XML dafür verwenden
dim vrstr asstring=<s>
some words
some words
some
words
</s>
Wird aber noch nicht von R # unterstützt. Die gute Nachricht ist, dass sie bald unterstützt werden! Bitte stimmen Sie über Youtrack ab , um JetBrains zu benachrichtigen, dass Sie sie auch benötigen.
Das ist schlecht. Sie haben gerade 4 Instanzen von Zeichenfolgen erstellt
TS
Ich habe einen alten VB6-Code geerbt, den ich auf VB.NET portieren muss, der voll davon ist! :( In diesem Fall ziehe ich es vor, die Leistung zu opfern, um die Lesbarkeit zu gewährleisten.
Zac
Das musst du nicht. Sie können jederzeit verketten, ohne eine Variable neu zuzuweisen, und innerhalb dieser Zeilen formatieren
TS
In meinem Fall kann nicht auf die richtige Syntax umgeschaltet werden, da ich eine ganze Reihe von Codes ändern sollte und keine Zeit mehr für das Projekt bleibt.
Zac
-1
Verwenden Sie vbCrLfoder vbNewLine. Es funktioniert mit MessageBoxen und vielen anderen Steuerelementen, die ich getestet habe.
Bist du sicher? Ich weiß, dass sie mehrzeilige Anweisungen zulassen werden, aber werden sie auch mehrzeilige Zeichenfolgen zulassen ? Ich meine "Hallo <newline> Welt"?
Mehrdad Afshari
1
Das Entfernen von Zeilenfortsetzungszeichen und mehrzeiligen Literalzeichenfolgen sind verschiedene Merkmale.
JaredPar
-16
Wenn es wie C # ist (ich habe VB.Net nicht installiert), können Sie einem String @ voranstellen
foo =@"Multiline
String"
Dies ist auch nützlich für Dinge wie @ "C: \ Windows \ System32 \" - es deaktiviert im Wesentlichen das Escapezeichen und das Multiline.
Antworten:
Sie können XML-Literale verwenden , um einen ähnlichen Effekt zu erzielen:
Denken Sie daran, dass Sie bei Sonderzeichen einen CDATA-Block verwenden sollten:
UPDATE 2015:
Mehrzeilige Zeichenfolgenliterale wurden in Visual Basic 14 (in Visual Studio 2015 ) eingeführt. Das obige Beispiel kann nun wie folgt geschrieben werden:
MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.
Details werden dem Roslyn New-Language-Features-in-VB-14- Github-Repository hinzugefügt .
quelle
s="... a=~someint~ ..."
und danns=s.Replace("~someint~', SomeInt)
.VB.Net hat keine solche Funktion und wird es auch nicht in Visual Studio 2010. Das Feature kommt , dass jirwin wird beziehe wird impliziter Zeilenfortsetzungs genannt. Es hat mit dem Entfernen des _ aus einer mehrzeiligen Anweisung oder einem mehrzeiligen Ausdruck zu tun. Dadurch entfällt die Notwendigkeit, eine mehrzeilige Zeichenfolge mit _ zu beenden. In VB ist jedoch noch kein mehrzeiliges Zeichenfolgenliteral vorhanden.
Beispiel für mehrzeilige Zeichenfolge
Visual Studio 2008
Visual Studio 2010
quelle
Ich habe diese Variante verwendet:
es erlaubt <> in der Zeichenfolge
quelle
Mehrzeilige Zeichenfolgen sind seit Visual Studio 2015 verfügbar.
Sie können sie mit Zeichenfolgeninterpolation kombinieren , um die Nützlichkeit zu maximieren:
Beachten Sie, dass interpolierte Strings beginnen mit ,
$
und Sie müssen kümmern"
,{
und}
enthalten innen - wandeln sie in""
,{{
oder}}
sind.Hier sehen Sie die tatsächliche Syntaxhervorhebung interpolierter Teile des obigen Codebeispiels:
Wenn Sie sich fragen, ob ihre Erkennung durch den Visual Studio-Editor auch mit Refactoring funktioniert (z. B. Massenumbenennung der Variablen), dann haben Sie Recht, Code Refactoring funktioniert mit diesen. Ganz zu schweigen davon, dass sie auch IntelliSense, Referenzzählung oder Code-Analyse unterstützen.
quelle
Mehrzeilige Zeichenfolgenliterale werden in Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884 eingeführt
Sie können es dann in der VS2015-Vorschau ab sofort verwenden - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (beachten Sie, dass Sie VS2015 auch dann verwenden können, wenn Sie auf eine ältere Version abzielen Version des .NET Frameworks)
VB-Zeichenfolgen sind jetzt im Grunde die gleichen wie wörtliche C # -Strings - sie unterstützen keine Backslash-Escape-Sequenzen wie \ n und erlauben Zeilenumbrüche innerhalb des Strings, und Sie maskieren das Anführungszeichen mit doppelten Anführungszeichen ""
quelle
Dies war ein wirklich hilfreicher Artikel für mich, aber niemand erwähnte, wie man verkettet wenn man einige Variablen senden möchte, was in 99% der Fälle erforderlich ist.
... <% = Variable %> ...
So geht's:
<SQL> SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>' </SQL>.Value
quelle
Nun, da Sie auf Ihrer Python zu sein scheinen, kann ich vorschlagen, dass Sie Ihren Text in Python kopieren, wie:
dann mache ein:
oder
dann können Sie das zumindest kopieren und in Ihren VB-Code einfügen. Bonuspunkte, wenn Sie einen Hotkey binden (am schnellsten mit: Autohotkey ), um dies für alles zu tun, was sich in Ihrem Einfügepuffer befindet. Die gleiche Idee funktioniert gut für einen SQL-Formatierer.
quelle
Mehrzeilige Zeichenfolgenliterale in vb.net mithilfe der XElement-Klasse.
quelle
Für mich ist das das nervigste an VB als Sprache. Im Ernst, ich habe einmal den String in eine Datei geschrieben und Code geschrieben in der Art von:
Nur damit ich die Abfrage direkt auf dem SQL Server testen kann, wenn ich muss.
Meine derzeitige Methode besteht darin, eine gespeicherte Prozedur auf dem SQL Server zu verwenden und diese einfach aufzurufen, damit ich Parameter an die Abfrage usw. Übergeben kann
quelle
Ich habe herausgefunden, wie man sowohl <! [CDATA [als auch <% = für Variablen verwendet, damit Sie ohne Sorgen codieren können.
Grundsätzlich müssen Sie die CDATA-Tags vor der VB-Variablen beenden und anschließend erneut hinzufügen, damit die CDATA den VB-Code nicht erfasst. Sie müssen den gesamten Codeblock in ein Tag einschließen, da Sie mehrere CDATA-Blöcke haben.
quelle
Sie könnten (sollten?) Die Zeichenfolge in eine Ressourcendatei (z. B. "Mein Projekt" / Ressourcen) einfügen und dann mit abrufen
quelle
Haftungsausschluss: Ich liebe Python. Die mehrzeiligen Zeichenfolgen sind nur ein Grund.
Aber ich mache auch VB.Net, also hier ist meine Abkürzung für besser lesbare lange Saiten.
quelle
Sie können XML dafür verwenden
quelle
In Visual Studio 2010 (VB NET) versuche ich Folgendes und funktioniert einwandfrei
quelle
Verfügbar in Visual Basic 14 als Teil von Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Wird aber noch nicht von R # unterstützt. Die gute Nachricht ist, dass sie bald unterstützt werden! Bitte stimmen Sie über Youtrack ab , um JetBrains zu benachrichtigen, dass Sie sie auch benötigen.
quelle
Wenn Sie in VB.Net ein XML-Literal mit einer Zeilencodevariablen benötigen, gehen Sie folgendermaßen vor:
quelle
Sie können
System.Text.StringBuilder
class auch folgendermaßen verwenden :Dann erhalten Sie die mehrzeilige Zeichenfolge mit:
quelle
Da dies ein Problem mit der Lesbarkeit ist, habe ich den folgenden Code verwendet:
quelle
Verwenden Sie
vbCrLf
odervbNewLine
. Es funktioniert mit MessageBoxen und vielen anderen Steuerelementen, die ich getestet habe.Es werden zwei identische MessageBoxen mit 2 Zeilen angezeigt.
quelle
Nein, VB.NET verfügt noch nicht über eine solche Funktion. Es wird jedoch in der nächsten Iteration von VB (Visual Basic 10) verfügbar sein ( Link )
quelle
Wenn es wie C # ist (ich habe VB.Net nicht installiert), können Sie einem String @ voranstellen
Dies ist auch nützlich für Dinge wie @ "C: \ Windows \ System32 \" - es deaktiviert im Wesentlichen das Escapezeichen und das Multiline.
quelle