Existe-t-il un moyen d'avoir des chaînes multilignes dans VB.NET comme Python?
a = """
multi
line
string
"""
ou PHP?
$a = <<<END
multi
line
string
END;
Bien sûr, quelque chose qui n'est pas
"multi" & _
"line
Vous pouvez utiliser littéraux XML pour obtenir un effet similaire:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s As String = <a>Hello
World</a>.Value
N'oubliez pas que si vous avez des caractères spéciaux, vous devez utiliser un bloc CDATA:
Dim s As String = <![CDATA[Hello
World & Space]]>.Value
Des littéraux multi-lignes ont été introduits dans Visual Basic 14 (dans Visual Studio 2015 ). L'exemple ci-dessus peut maintenant être écrit:
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.
Les détails sont ajoutés au Roslyn New-Language-Features-in-VB-14 Référentiel Github.
VB.Net ne possède pas cette fonctionnalité et il not viendra dans Visual Studio 2010. La fonctionnalité référencée par jirwin est appelée continuation de ligne implicite. Cela concerne la suppression du _ d'une déclaration ou d'une expression multiligne. Cela supprime la nécessité de terminer une chaîne multiligne avec _ mais il n'y a toujours pas de littéral de chaîne multiligne dans VB.
Exemple pour une chaîne multiligne
Visual Studio 2008
Dim x = "line1" & vbCrlf & _
"line2"
Visual Studio 2010
Dim x = "line1" & vbCrlf &
"line2"
J'ai utilisé cette 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()
il permet <> dans la chaîne
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Vous pouvez les combiner avec une interpolation string pour maximiser l'utilité:
Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"
Dim sql As String = $"
SELECT {primaryKey}, Description
FROM {inventoryTable}
ORDER BY DateAdded
"
Notez que les chaînes interpolées commencent par $
et que vous devez vous occuper de "
, {
et }
contenus à l'intérieur - convertissez-les en ""
, {{
ou }}
respectivement.
Ici, vous pouvez voir la mise en évidence de la syntaxe réelle des parties interpolées de l'exemple de code ci-dessus:
Si vous vous demandez si leur reconnaissance par l'éditeur Visual Studio fonctionne également avec le refactoring (par exemple, renommer en masse les variables), alors vous avez raison, le refactoring code fonctionne avec celles-ci. Sans mentionner qu'ils prennent également en charge IntelliSense, le comptage de références ou l'analyse de code.
Les littéraux de chaîne multilignes sont introduits dans Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
Vous pouvez ensuite utiliser le VS2015 Preview - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (notez que vous pouvez toujours utiliser VS2015 même lorsque vous ciblez une ancienne version du framework .NET)
Dim multiline = "multi
line
string"
Les chaînes VB sont désormais essentiellement les mêmes que les chaînes verbatim C # - elles ne prennent pas en charge les séquences d'échappement avec une barre oblique inverse comme\n, elles autorisent les nouvelles lignes dans la chaîne et vous échappez le symbole de citation par des guillemets ""
c'était un article vraiment utile pour moi, mais personne n'a mentionné comment concaténer si vous voulez envoyer des variables, ce que vous devez faire 99% du temps.
... <% = variable%> ...
Voici comment vous le faites:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Eh bien, puisque vous semblez être sur votre python, puis-je vous suggérer de copier votre texte en python, comme ceci:
s="""this is gonna
last quite a
few lines"""
alors faites 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")
ou
print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))
# "this is gonna" & _
# "last quite a" & _
# "few lines"
alors au moins, vous pouvez copier cela et le mettre dans votre code VB. Points bonus si vous liez un raccourci clavier (Le plus rapide à obtenir avec: Autohotkey ) pour ce faire, quel que soit le contenu de votre tampon de collage. La même idée fonctionne bien pour un formateur SQL.
Littéraux de chaîne multiligne dans vb.net utilisant 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
Pour moi, c’est la chose la plus agaçante à propos de VB en tant que langage . Sérieusement, j’ai une fois écrit la chaîne dans un fichier et écrit du code dans le sens suivant:
Dim s as String = file_get_contents("filename.txt")
juste pour que je puisse tester la requête directement sur le serveur SQL si besoin est.
Ma méthode actuelle consiste à utiliser une procédure stockée sur le serveur SQL et à l'appeler pour que je puisse passer des paramètres à la requête, etc.
J'ai compris comment utiliser à la fois <! [CDATA [et <% = pour les variables, ce qui vous permet de coder sans souci.
En gros, vous devez terminer les balises CDATA avant la variable VB, puis l'ajouter de nouveau après afin que CDATA ne capture pas le code VB. Vous devez envelopper le bloc de code entier dans une balise, car vous aurez plusieurs blocs CDATA.
Dim script As String = <code><![CDATA[
<script type="text/javascript">
var URL = ']]><%= domain %><![CDATA[/mypage.html';
</script>]]>
</code>.value
Vous pourriez (devriez?) Mettre la chaîne dans un fichier de ressources (par exemple, "Mon projet"/Ressources) et ensuite l'obtenir avec
Dim a = My.Resources.Whatever_you_chose
Disclaimer: J'adore le python. Ses chaînes multi-lignes ne sont qu'une des raisons.
Mais je fais aussi VB.Net, alors voici mon raccourci pour des chaînes plus lisibles.
Dim lines As String() = {
"Line 1",
"Line 2",
"Line 3"
}
Dim s As String = Join(lines, vbCrLf)
vous pouvez utiliser XML pour cela comme
dim vrstr as string = <s>
some words
some words
some
words
</s>
Disponible dans Visual Basic 14 dans Visual Studio 2015 https://msdn.Microsoft.com/en-us/magazine/dn890368.aspx
Mais pas encore supporté par R #. La bonne nouvelle est qu'ils seront bientôt pris en charge! Veuillez voter sur Youtrack pour informer JetBrains que vous en avez également besoin.
dans Visual studio 2010 (VB NET), j’essaie les solutions suivantes et fonctionne bien.
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>
Si vous avez besoin d'un littéral XML dans VB.Net avec une variable de code de ligne, procédez comme suit:
<Tag><%= New XCData(T.Property) %></Tag>
Utilisez vbCrLf
ou vbNewLine
. Cela fonctionne avec MessageBoxes et beaucoup d'autres contrôles que j'ai testés.
Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)
Il montrera deux MessageBox identiques avec 2 lignes.
Vous pouvez également utiliser la classe System.Text.StringBuilder
de cette façon:
Dim sValue As New System.Text.StringBuilder
sValue.AppendLine("1st Line")
sValue.AppendLine("2nd Line")
sValue.AppendLine("3rd Line")
Ensuite, vous obtenez la chaîne multiligne en utilisant:
sValue.ToString()