Comment faire un littéral de chaîne verbatim dans VB.NET?
Ceci est réalisé en C # comme suit:
String str = @"c:\folder1\file1.txt";
Cela signifie que les barres obliques inverses sont traitées littéralement et non comme des caractères d'échappement.
Comment cela est-il réalisé dans VB.NET?
Tous les littéraux de chaîne dans VB.NET sont des littéraux de chaîne textuels. Ecrivez simplement
Dim str As String = "c:\folder1\file1.txt"
VB.NET ne prend pas en charge les caractères de contrôle en ligne. Les barres obliques inverses sont donc toujours interprétées littéralement.
Le seul caractère à échapper est le guillemet double, qui est échappé en le doublant, comme vous le faites en C #
Dim s As String = """Ahoy!"" cried the captain." ' "Ahoy!" cried the captain.
@MarkJ l'a déjà souligné dans le message de @Jon Skeet.
VB.Net prend cela en charge abomination , si vous devez absolument utiliser un verbatim via un littéral XML en ligne.
Pensez à mettre la chaîne en cache! N'évaluez pas cela à chaque fois ...
Imports System.Xml.Linq
Dim cmdText as String = <![CDATA[
SELECT
Field1, Field2, Field3
FROM table
WHERE Field1 = 1
]]>.Value
[modifier 2015-janv-5]
VB14/VS2015 prend en charge les chaînes multilignes sans manigances.
Dim cmdText as String = "
SELECT
Field1, Field2, Field3
FROM table
WHERE Field1 = 1"
VB ne traite pas \
comme caractère d'échappement de toute façon, vous pouvez donc simplement écrire la chaîne comme un littéral normal:
Dim str = "c:\folder1\file1.txt"
Pour autant que je sache, VB n'a aucun moyen d'atteindre l'autre objectif majeur des littéraux de chaînes textuelles, celui d'autoriser plusieurs lignes - vous devez utiliser VbCrLf
pour cela , je crois. (Ou Environment.NewLine
bien sûr - cela dépend de vos besoins. Parfois, vous voulez le séparateur de ligne spécifique au système; parfois vous en voulez un spécifique tel que requis par un protocole particulier, etc.)
EDIT: Les versions plus récentes de VB prennent en charge plusieurs lignes dans les littéraux de chaîne
En cas de doute, regardez cette page de comparaison: http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
VB.NET
'No string literal operator
Dim filename As String = "c:\temp\x.dat"
C #
// String literal
string filename = @"c:\temp\x.dat";
string filename = "c:\\temp\\x.dat";
VB.NET ne reconnaît pas "\" comme un caractère d'échappement. Mais, vous pouvez peut-être utiliser une autre solution (prenez en compte, cela fonctionne lentement que la concaténation, par exemple):
Dim s As String = Regex.Unescape("c:\\folder1\\file1.txt\nc:\\folder1\\file2.txt\nc:\\folder1\\file3.txt")
Dans ce cas, la chaîne "s" contient trois lignes. Le symbole "\" est le suivant "\" de la méthode regex Unescape (), c'est pourquoi il se répète deux fois à chaque fois.
"\ n" est un caractère spécial "nouvelle ligne" de type C #. Vous pouvez également utiliser "\ t" (onglet), etc.
Dim sourceText As String =
<string>
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections
Imports Microsoft.Win32
Imports System.Linq
Imports System.Text
Imports Roslyn.Compilers
Imports System.ComponentModel
Imports System.Runtime.CompilerServices
Imports Roslyn.Compilers.VisualBasic
Namespace HelloWorld
Module Program
Sub Main(args As String())
Console.WriteLine("Hello, World!")
End Sub
End Module
End Namespace
</string>
Les littéraux XML VB ne fonctionneront malheureusement pas dans une page de rasoir .vbhtml. Espérons que cela changera dans la prochaine version.