簡體   English   中英

如何在VB.NET中執行逐字字符串文字?

[英]How to do a verbatim string literal in 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已經在@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"

VB不會將\\視為轉義字符,因此您可以將字符串寫為普通文字:

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

據我所知,VB沒有任何方法可以實現逐字字符串文字的另一個主要目標,即允許多行 - 你必須使用VbCrLf ,我相信。 (或者Environment.NewLine當然 - 它取決於您的要求。有時您需要系統特定的行分隔符;有時您需要特定協議所需的特定行分隔符等)

編輯: 較新版本的VB支持字符串文字中的多行

如有疑問,請查看此比較頁面: 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”包含三行。 符號“\\”從正則表達式方法Unescape()保護下一個“\\”,這就是它每次重復兩次的原因。

“\\ n”是一個類似C#的“新行”特殊字符。 您也可以使用“\\ t”(制表符),依此類推。

遺憾的是,VB XML文字在.vbhtml razor頁面中不起作用。 希望這將在下一個版本中發生變化。

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>  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM