61

VB.NETで逐語的な文字列リテラルをどのように実行しますか?

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

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

これは、円記号がエスケープ文字としてではなく文字通りに扱われることを意味します。

これはVB.NETでどのように達成されますか?

4

7 に答える 7

67

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.
于 2012-10-31T10:06:27.030 に答える
33

@MarkJは、@JonSkeetの投稿ですでにこれを指摘しています。

インラインXMLリテラルを介して逐語的に使用する必要がある場合、VB.Netはこの忌まわしい機能をサポートします。

文字列をキャッシュすることを検討してください!毎回これを評価しないでください...

Imports System.Xml.Linq

Dim cmdText as String = <![CDATA[
SELECT 
Field1, Field2, Field3 
FROM table
WHERE Field1 = 1
]]>.Value

[2015年1月5日編集]

VB14 / VS2015は、シェナニガンなしで複数行の文字列をサポートします。

Dim cmdText as String = "
SELECT 
Field1, Field2, Field3 
FROM table
WHERE Field1 = 1"
于 2014-05-12T23:52:49.477 に答える
12

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

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

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

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

于 2012-10-31T10:07:37.390 に答える
5

疑問がある場合は、次の比較ページを参照してください: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";  
于 2012-10-31T10:19:46.620 に答える
2

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」(タブ)などを使用することもできます。

于 2017-01-27T18:37:20.323 に答える
2
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>  
于 2017-06-24T05:29:37.073 に答える
0

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

于 2014-06-18T16:34:17.657 に答える