C'è un modo per avere stringhe multilinea in VB.NET come Python
a = """
multi
line
string
"""
o PHP?
$a = <<<END
multi
line
string
END;
Certo qualcosa che non lo è
"multi" & _
"line
C'è un modo per avere stringhe multilinea in VB.NET come Python
a = """
multi
line
string
"""
o PHP?
$a = <<<END
multi
line
string
END;
Certo qualcosa che non lo è
"multi" & _
"line
Risposte:
È possibile utilizzare i letterali XML per ottenere un effetto simile:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
Ricorda che se hai caratteri speciali, dovresti usare un blocco CDATA:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
I letterali di stringa multilinea sono stati introdotti in Visual Basic 14 (in Visual Studio 2015 ). L'esempio sopra può ora essere scritto come:
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.
I dettagli vengono aggiunti al repository Github Roslyn New-Language-Features-in-VB-14 .
s="... a=~someint~ ..."
e allora s=s.Replace("~someint~', SomeInt)
.
VB.Net non dispone di tale funzionalità e non arriverà in Visual Studio 2010. La funzionalità a cui fa riferimento jirwin si chiama continuazione di riga implicita. Ha a che fare con la rimozione di _ da un'istruzione o un'espressione multilinea. Ciò elimina la necessità di terminare una stringa multilinea con _ ma non esiste ancora una stringa multilinea letterale in VB.
Esempio per stringa multilinea
Visual Studio 2008
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
Ho usato questa variante:
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()
consente <> nella stringa
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Puoi combinarli con l'interpolazione di stringhe per massimizzare l'utilità:
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Nota che le stringhe interpolate iniziano con $
e devi prenderti cura di "
, {
e }
contenute al suo interno - convertirle in ""
, {{
o }}
rispettivamente.
Qui puoi vedere l' evidenziazione della sintassi effettiva delle parti interpolate dell'esempio di codice sopra:
Se ti chiedi se il loro riconoscimento da parte dell'editor di Visual Studio funziona anche con il refactoring (ad esempio rinominando in massa le variabili), allora hai ragione, il refactoring del codice funziona con questi. Senza contare che supportano anche IntelliSense, il conteggio dei riferimenti o l'analisi del codice.
I valori letterali di stringa multilinea sono introdotti in Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
È possibile utilizzarlo quindi nell'anteprima di VS2015, ora disponibile - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (notare che è ancora possibile utilizzare VS2015 anche quando si sceglie come target un vecchio versione di .NET framework)
Dim multiline = "multi
line
string"
Le stringhe VB ora sono sostanzialmente le stesse delle stringhe testuali C #: non supportano sequenze di escape di barra rovesciata come \ n e consentono nuove righe all'interno della stringa e si evita il simbolo delle virgolette con le virgolette doppie ""
questo è stato un articolo davvero utile per me, ma nessuno ha menzionato come concatenare nel caso in cui si desideri inviare alcune variabili, che è ciò che è necessario fare il 99% delle volte.
... <% = variabile %> ...
Ecco come lo fai:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Bene, dato che sembri essere sul tuo python, posso suggerirti di copiare il tuo testo in Python, come:
s="""this is gonna
last quite a
few lines"""
quindi fai un:
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")
o
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "few lines"
allora almeno puoi copiarlo e inserirlo nel tuo codice VB. Punti bonus se si associa un tasto di scelta rapida (il più veloce da ottenere con: tasto di scelta rapida automatica ) per farlo per qualsiasi cosa si trovi nel buffer di incollaggio . La stessa idea funziona bene per un formattatore SQL.
Letterali di stringa multilinea in vb.net usando la classe XElement.
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
Per me questa è la cosa più fastidiosa di VB come lingua. Seriamente, una volta ho scritto la stringa in un file e ho scritto qualcosa di simile a questo:
Dim s as String = file_get_contents("filename.txt")
solo così ho potuto testare la query direttamente sul server SQL, se necessario.
Il mio metodo attuale è quello di utilizzare una procedura memorizzata su SQL Server e chiamarla in modo da poter passare i parametri alla query, ecc
Ho capito come usare entrambi <! [CDATA [insieme a <% = per le variabili, che ti permette di scrivere codice senza preoccupazioni.
Fondamentalmente devi terminare i tag CDATA prima della variabile VB e quindi aggiungerli nuovamente dopo in modo che CDATA non acquisisca il codice VB. Devi racchiudere l'intero blocco di codice in un tag perché avrai più blocchi CDATA.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Disclaimer: amo Python. Le stringhe multilinea sono solo una delle ragioni.
Ma faccio anche VB.Net, quindi ecco la mia scorciatoia per stringhe lunghe più leggibili.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
puoi usare XML per questo tipo
dim vrstr as string = <s>
some words
some words
some
words
</s>
in Visual Studio 2010 (VB NET) provo quanto segue e funziona benissimo
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>
Disponibile in Visual Basic 14 come parte di Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Ma non ancora supportato da R #. La buona notizia è che saranno presto supportati! Si prega di votare su Youtrack per comunicare a JetBrains che ne avete bisogno anche.
Se hai bisogno di un valore letterale XML in VB.Net con una variabile del codice di linea, ecco come lo faresti:
<Tag><%= New XCData(T.Property) %></Tag>
Poiché questo è un problema di leggibilità, ho usato il seguente codice:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
Usa vbCrLf
o vbNewLine
. Funziona con MessageBox e molti altri controlli che ho testato.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
Mostrerà due MessageBox identici con 2 righe.
No, VB.NET non ha ancora una tale funzione. Sarà disponibile nella prossima iterazione di VB (Visual Basic 10) comunque ( link )
se è come C # (non ho installato VB.Net) puoi aggiungere il prefisso a una stringa con @
foo = @"Multiline
String"
questo è utile anche per cose come @ "C: \ Windows \ System32 \" - essenzialmente disattiva l'escaping e attiva multilinea.