VB.NETで逐語的な文字列リテラルをどのように実行しますか?
これは、C#で次のように実現されます。
String str = @"c:\folder1\file1.txt";
これは、円記号がエスケープ文字としてではなく文字通りに扱われることを意味します。
これはVB.NETでどのように達成されますか?
VB.NETで逐語的な文字列リテラルをどのように実行しますか?
これは、C#で次のように実現されます。
String str = @"c:\folder1\file1.txt";
これは、円記号がエスケープ文字としてではなく文字通りに扱われることを意味します。
これはVB.NETでどのように達成されますか?
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.
@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"
VBはとにかくエスケープ文字として扱わない\
ので、文字列を通常のリテラルとして記述することができます。
Dim str = "c:\folder1\file1.txt"
私の知る限り、VBには、逐語的な文字列リテラルのもう1つの主要な目標である、複数行を許可するという目標を達成する方法がありません。そのために使用する必要VbCrLf
があると思います。(またはEnvironment.NewLine
もちろん、要件によって異なります。システム固有の行区切り記号が必要な場合もあれば、特定のプロトコルで必要とされる特定の行区切り記号が必要な場合もあります。)
疑問がある場合は、次の比較ページを参照してください: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は、「\」をエスケープ文字として認識しません。ただし、さらに別の解決策を使用することもできます(たとえば、連結よりも動作が遅いことを考慮に入れてください)。
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」(タブ)などを使用することもできます。
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>
残念ながら、VBXMLリテラルは.vbhtmlかみそりのページでは機能しません。うまくいけば、それは次のリリースで変更されるでしょう。