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
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
Réponses:
Vous pouvez utiliser des 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
Les littéraux de chaîne multiligne ont été introduits dans Visual Basic 14 (dans Visual Studio 2015 ). L'exemple ci-dessus peut maintenant être écrit comme suit:
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.
Des détails sont ajoutés au référentiel Github Roslyn New-Language-Features-in-VB-14 .
s="... a=~someint~ ..."et puis s=s.Replace("~someint~', SomeInt).
VB.Net n'a pas une telle fonctionnalité et elle ne sera pas disponible dans Visual Studio 2010. La fonctionnalité que jirwin fait référence est appelée continuation de ligne implicite. Il s'agit de supprimer le _ d'une instruction ou d'une expression multiligne. Cela supprime le besoin de terminer une chaîne multiligne avec _ mais il n'y a toujours pas de littéral de chaîne multiligne dans VB.
Exemple de 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 autorise <> dans la chaîne
Dim sql As String = "
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Vous pouvez les combiner avec une interpolation de chaîne pour maximiser leur 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 commencent par interpolées $et vous avez besoin de prendre soin de ", {et }contenues à l' intérieur - les convertir en "", {{ou }}respectivement.
Ici, vous pouvez voir la coloration syntaxique 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 de 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 multiligne sont introduits dans Visual Basic 14.0 - https://roslyn.codeplex.com/discussions/571884
Vous pouvez ensuite utiliser dans l'aperçu VS2015, disponible maintenant - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (notez que vous pouvez toujours utiliser VS2015 même si vous ciblez un version du framework .NET)
Dim multiline = "multi
line
string"
Les chaînes VB sont désormais fondamentalement les mêmes que les chaînes verbatim C # - elles ne prennent pas en charge les séquences d'échappement anti-slash comme \ n, et elles autorisent les retours à la ligne dans la chaîne, et vous échappez le symbole de guillemet avec des guillemets doubles ""
c'était un article vraiment utile pour moi, mais personne n'a mentionné comment concaténer au cas où vous voudriez envoyer des variables, ce que vous devez faire 99% du temps.
... <% = variable %> ...
Voici comment procéder:
<SQL>
SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>'
</SQL>.Value
Eh bien, puisque vous semblez être au courant de votre python, puis-je vous suggérer de copier votre texte en python, comme:
s="""this is gonna
last quite a
few lines"""
puis 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 le copier et le mettre dans votre code VB. Des points bonus si vous liez un raccourci clavier (le plus rapide à obtenir avec: Autohotkey ) pour le faire pour tout ce qui se trouve dans votre tampon de collage . La même idée fonctionne bien pour un formateur SQL.
Littéraux de chaîne multilignes dans vb.net à l'aide de 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 ennuyeuse à propos de VB en tant que langue. Sérieusement, j'ai une fois écrit la chaîne dans un fichier et écrit du code quelque chose du genre:
Dim s as String = file_get_contents("filename.txt")
juste pour que je puisse tester la requête directement sur le serveur SQL si j'en ai besoin.
Ma méthode actuelle consiste à utiliser une procédure stockée sur le serveur SQL et à l'appeler simplement pour que je puisse passer des paramètres à la requête, etc.
J'ai compris comment utiliser à la fois <! [CDATA [avec <% = pour les variables, ce qui vous permet de coder sans souci.
Vous devez essentiellement terminer les balises CDATA avant la variable VB, puis la rajouter après pour 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
Avertissement: j'adore le python. Ses chaînes multilignes ne sont qu'une des raisons.
Mais je fais aussi VB.Net, alors voici mon raccourci pour de longues 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>
dans Visual studio 2010 (VB NET), j'essaye ce qui suit 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>
Disponible dans Visual Basic 14 dans le cadre de Visual Studio 2015 https://msdn.microsoft.com/en-us/magazine/dn890368.aspx
Mais pas encore pris en charge 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.
Si vous avez besoin d'un littéral XML dans VB.Net avec une variable de code de ligne, voici comment procéder:
<Tag><%= New XCData(T.Property) %></Tag>
Vous pouvez également utiliser la System.Text.StringBuilderclasse de cette manière:
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()
Puisqu'il s'agit d'un problème de lisibilité, j'ai utilisé le code suivant:
MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text
Utilisez vbCrLfou vbNewLine. Cela fonctionne avec les MessageBox et de nombreux 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 affichera deux MessageBox identiques avec 2 lignes.
Non, VB.NET n'a pas encore une telle fonctionnalité. Il sera cependant disponible dans la prochaine itération de VB (Visual Basic 10) ( lien )
si c'est comme C # (je n'ai pas VB.Net installé), vous pouvez préfixer une chaîne avec @
foo = @"Multiline
String"
ceci est également utile pour des choses comme @ "C: \ Windows \ System32 \" - il désactive essentiellement l'échappement et active la multiligne.