Mes deux cents: dans VS 2017, votre code VB.NET serait compilé.
ᗩИ Ꭰ ЯƎᗩ
Réponses:
223
Vous pouvez utiliser des littéraux XML pour obtenir un effet similaire:
Imports System.XML
Imports System.XML.Linq
Imports System.Core
Dim s AsString=<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 AsString=<![CDATA[Hello
World & Space]]>.Value
MISE À JOUR 2015:
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 AsString="Hello
World & Space"
MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.
comment pouvez-vous faire des remplacements de variables là-dedans? comme "a =" & someint & ","
Christopher Mahan
1
@Christopher - Je trouve généralement plus lisible de mettre des jetons dans la constante de chaîne, puis de les remplacer. Untel s="... a=~someint~ ..."et puis s=s.Replace("~someint~', SomeInt).
Herb Caudill
Cela ne semble pas fonctionner avec la compilation dynamique: CodeDomProvider.CreateProvider ("VisualBasic"). CompileAssemblyFromFile (<options>, <fichier .vb avec la syntaxe d'astuce ci-dessus>) ... Des idées? Est-ce juste du sucre syntaxique VS 2010?
Chad
1
@romkyns Ce n'est pas vrai, j'ai compris comment utiliser CDATA et être toujours en mesure de l'intégrer en utilisant <% =%> Voir ici
Nelson
1
Impressionnant! Comment maintenir l'indentation du code sans l'introduire dans le littéral sous la nouvelle syntaxe?
Panzercrisis
50
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.
Alors, comment ça marche pour les littéraux XML? Soit c'est possible, soit les littéraux XML utilisent une technique différente - et s'il s'agit d'une technique différente, celle qui pourrait être étendue aux chaînes multilignes.
mellamokb
1
Les littéraux XML @mellamokb sont .. spéciaux faute d'un meilleur mot. Le compilateur les comprend et leur permettra donc de s'étendre implicitement sur plusieurs lignes. Aucun support de ce type n'a été ajouté pour les chaînes multilignes. L'ajout d'un tel support est beaucoup plus facile que les littéraux XML, il n'a tout simplement pas rencontré la barre pour cette version.
JaredPar
38
J'ai utilisé cette variante:
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()
Les chaînes multilignes sont disponibles depuis Visual Studio 2015.
Dim sql AsString="
SELECT ID, Description
FROM inventory
ORDER BY DateAdded
"
Vous pouvez les combiner avec une interpolation de chaîne pour maximiser leur utilité:
Dim primaryKey AsString="ID"Dim inventoryTable AsString="inventory"Dim sql AsString=$"
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 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 ""
Merci Lucian d'avoir ajouté des chaînes multi-lignes dans le VB. Vous pouvez peut-être mettre à jour votre réponse, car VS 2015 est désormais RTM. Et peut-être que vous pouvez également pousser quelqu'un dans votre entreprise pour mettre à jour l' article MSDN associé .
miroxlav
14
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
Dans ce cas, vous souhaitez éviter la concaténation et utiliser à la place des paramètres SQL car ils sont plus efficaces pour se protéger des attaques par injection SQL. Cependant, je peux voir que cela est utile pour la génération SQL dynamique (sans passer par l'utilisateur).
Chad Levy
10
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")
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
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
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 asString= 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 AsString=<code><![CDATA[<script type="text/javascript">
var URL =']]><%= domain %><![CDATA[/mypage.html';</script>]]></code>.value
Vous avez besoin de _ à la fin de la ligne pour chaque "Ligne .." qui a l'air moche.
Kenji Noguchi
2
En fait, non. Les versions ultérieures de VB (2010 et plus tard je pense?) Ne nécessitent pas de _ dans de nombreux cas, y compris l'exemple montré ici.
Darryl le
2
vous pouvez utiliser XML pour cela comme
dim vrstr asstring=<s>
some words
some words
some
words
</s>
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.
C'est mauvais. Vous venez de créer 4 instances de chaîne
TS
J'ai hérité d'un ancien code VB6 que je dois porter sur VB.NET qui en est plein! :( Dans ce cas, je préfère sacrifier les performances pour maintenir la lisibilité.
Zac
Vous n'êtes pas obligé. Vous pouvez toujours concaténer sans réattribuer une variable et formater dans ces lignes
TS
Dans mon cas, il n'est pas possible de passer à la syntaxe correcte car je devrais modifier un tas de code complet et il ne reste plus de temps sur le projet.
Zac
-1
Utilisez vbCrLfou vbNewLine. Cela fonctionne avec les MessageBox et de nombreux autres contrôles que j'ai testés.
Vous êtes sûr? Je sais qu'ils vont autoriser les instructions multilignes, mais vont-ils aussi autoriser les chaînes multilignes ? Je veux dire "bonjour le monde <newline>"?
Mehrdad Afshari
1
La suppression du caractère de continuation de ligne et des chaînes littérales multilignes sont des fonctionnalités différentes.
JaredPar
-16
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.
Réponses:
Vous pouvez utiliser des littéraux XML pour obtenir un effet similaire:
N'oubliez pas que si vous avez des caractères spéciaux, vous devez utiliser un bloc CDATA:
MISE À JOUR 2015:
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:
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 .
la source
s="... a=~someint~ ..."
et puiss=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
Visual Studio 2010
la source
J'ai utilisé cette variante:
il autorise <> dans la chaîne
la source
Les chaînes multilignes sont disponibles depuis Visual Studio 2015.
Vous pouvez les combiner avec une interpolation de chaîne pour maximiser leur utilité:
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.
la source
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)
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 ""
la source
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
la source
Eh bien, puisque vous semblez être au courant de votre python, puis-je vous suggérer de copier votre texte en python, comme:
puis faites un:
ou
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.
la source
Littéraux de chaîne multilignes dans vb.net à l'aide de la classe XElement.
la source
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:
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.
la source
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.
la source
Vous pouvez (devriez?) Mettre la chaîne dans un fichier de ressources (par exemple "Mon projet" / Resources) et ensuite l'obtenir avec
la source
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.
la source
vous pouvez utiliser XML pour cela comme
la source
dans Visual studio 2010 (VB NET), j'essaye ce qui suit et fonctionne bien
la source
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.
la source
Si vous avez besoin d'un littéral XML dans VB.Net avec une variable de code de ligne, voici comment procéder:
la source
Vous pouvez également utiliser la
System.Text.StringBuilder
classe de cette manière:Ensuite, vous obtenez la chaîne multiligne en utilisant:
la source
Puisqu'il s'agit d'un problème de lisibilité, j'ai utilisé le code suivant:
la source
Utilisez
vbCrLf
ouvbNewLine
. Cela fonctionne avec les MessageBox et de nombreux autres contrôles que j'ai testés.Il affichera deux MessageBox identiques avec 2 lignes.
la source
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 )
la source
si c'est comme C # (je n'ai pas VB.Net installé), vous pouvez préfixer une chaîne avec @
ceci est également utile pour des choses comme @ "C: \ Windows \ System32 \" - il désactive essentiellement l'échappement et active la multiligne.
la source