web-dev-qa-db-ja.com

VB.NETで逐語的な文字列リテラルを行う方法は?

VB.NETでverbatim文字列リテラルをどのように行いますか?

これは、次のようにC#で実現されます。

String str = @"c:\folder1\file1.txt";

つまり、バックスラッシュはエスケープ文字としてではなく、文字通りに処理されます。

VB.NETでこれをどのように実現しますか?

52
CJ7

VB.NETのすべての文字列リテラルは、逐語的な文字列リテラルです。単に書く

Dim str As String = "c:\folder1\file1.txt"

VB.NETはインライン制御文字をサポートしていません。したがって、バックスラッシュは常に文字通りに解釈されます。

エスケープする必要がある唯一の文字は二重引用符です。これは、C#で行うように、二重引用符でエスケープします

Dim s As String = """Ahoy!"" cried the captain." ' "Ahoy!" cried the captain.
54
Steve

とにかくVBは\をエスケープ文字として扱わないため、通常のリテラルとして文字列を書くことができます。

Dim str = "c:\folder1\file1.txt"

私が知っている限り、VBは、逐語的文字列リテラルの他の主要な目標、複数行を許可するという目標を達成する方法がありません- そのためにVbCrLfを使用する必要があります 、(またはEnvironment.NewLineもちろん-要件に依存します。システム固有の行区切り文字が必要な場合があります。特定のプロトコルなどで必要な特定のもの)

編集: VBの新しいバージョンは、文字列リテラルで複数行をサポートします

11
Jon Skeet

疑わしい場合は、この比較ページをご覧ください。 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

VB.NETは、エスケープ文字として「\」を認識しません。ただし、さらに解決策を使用することもできます(たとえば、連結よりも動作が遅いことを考慮してください)。

Dim s As String = Regex.Unescape("c:\\folder1\\file1.txt\nc:\\folder1\\file2.txt\nc:\\folder1\\file3.txt")

この場合、文字列「s」には3行が含まれます。記号「\」は、次の「\」を正規表現メソッドUnescape()から保護するため、毎回2回繰り返されます。

「\ n」は、C#に似た「改行」特殊文字です。 「\ t」(タブ)なども使用できます。

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

残念ながら、VB XMLリテラルは.vbhtmlかみそりページでは機能しません。うまくいけば、それは次のリリースで変わるでしょう。

0
Randall