web-dev-qa-db-fra.com

Comment faire un littéral chaîne textuelle dans VB.NET?

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?

52
CJ7

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.
54
Steve

@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"
28
JJS

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

11
Jon Skeet

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";  
5
Carlos Quintanilla

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.

2
Aave
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>  
0
qianzuijiuren

Les littéraux XML VB ne fonctionneront malheureusement pas dans une page de rasoir .vbhtml. Espérons que cela changera dans la prochaine version.

0
Randall