Gibt es eine Möglichkeit, mehrzeilige Zeichenfolgen in VB.NET wie Python zu haben?
a = """
multi
line
string
"""
oder PHP?
$a = <<<END
multi
line
string
END;
Natürlich etwas, das nicht ist
"multi" & _
"line
Gibt es eine Möglichkeit, mehrzeilige Zeichenfolgen in VB.NET wie Python zu haben?
a = """
multi
line
string
"""
oder PHP?
$a = <<<END
multi
line
string
END;
Natürlich etwas, das nicht ist
"multi" & _
"line
Antworten:
Sie können XML-Literale verwenden , um einen ähnlichen Effekt zu erzielen:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
Denken Sie daran, dass Sie bei Sonderzeichen einen CDATA-Block verwenden sollten:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
Mehrzeilige Zeichenfolgenliterale wurden in Visual Basic 14 (in Visual Studio 2015 ) eingeführt. Das obige Beispiel kann nun wie folgt geschrieben werden:
Dim s As String = "Hello
World & Space"
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 .
s="... a=~someint~ ..."
und dann s=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
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
Ich habe diese Variante verwendet:
Dim query As String = <![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 = 1
AND
c.ActionPlan = 1
AND q.Q_Year = '11/12'
AND q.Q_Term <= (SELECT CurrentTerm FROM CR_Current_Term)
]]>.Value()
es erlaubt <> in der Zeichenfolge
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Sie können sie mit Zeichenfolgeninterpolation kombinieren , um die Nützlichkeit zu maximieren:
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
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.
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)
Dim multiline = "multi
line
string"
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 ""
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
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")
oder
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "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
Public Sub Test()
dim sOderBy as string = ""
dim xe as XElement = <SQL>
SELECT * FROM <%= sTableName %>
<ORDER_BY> ORDER BY <%= sOrderBy %></ORDER_BY>
</SQL>
'** conditionally remove a section
if sOrderBy.Length = 0 then xe.<ORDER BY>.Remove
'** convert XElement value to a string
dim sSQL as String = xe.Value
End Sub
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 as String = 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 As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
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.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
Sie können XML dafür verwenden
dim vrstr as string = <s>
some words
some words
some
words
</s>
In Visual Studio 2010 (VB NET) versuche ich Folgendes und funktioniert einwandfrei
Dim HtmlSample As String = <anything>what ever you want to type here with multiline strings</anything>
dim Test1 as string =<a>onother multiline example</a>
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.
Wenn Sie in VB.Net ein XML-Literal mit einer Zeilencodevariablen benötigen, gehen Sie folgendermaßen vor:
<Tag><%= New XCData(T.Property) %></Tag>
Da dies ein Problem mit der Lesbarkeit ist, habe ich den folgenden Code verwendet:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
Verwenden Sie vbCrLf
oder vbNewLine
. Es funktioniert mit MessageBoxen und vielen anderen Steuerelementen, die ich getestet habe.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
Es werden zwei identische MessageBoxen mit 2 Zeilen angezeigt.
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 )
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.