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 已经在 @Jon Skeet 的帖子中指出了这一点。

如果您绝对需要通过内联 XML Literal 逐字使用,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 没有任何方法可以实现逐字字符串文字的另一个主要目标,即允许多行——我相信你必须使用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”包含三行。符号“\”是保护下一个“\”免受正则表达式方法 Unescape() 的影响,这就是它每次重复两次的原因。

"\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

不幸的是,VB XML 文字在 .vbhtml 剃须刀页面中不起作用。希望这会在下一个版本中改变。

于 2014-06-18T16:34:17.657 回答