VB.NET 定義多行文本字符的幾種方式

vbCrLf

在 .NET 剛剛推出的時候,VB做爲一款被微軟用來「陪襯」C#的語言,在許多細節設計上遠不如C#方便。
好比在C#中寫一個多行文本,就有各類方式:html

string s1 = "我是一個多行文本\n這是第二行";

string s2 = @"我是一個多行文本
這是第二行";

string s3 = 
@"我是一個多行文本
這是第二行";

能夠看出C#在字符的賦值寫法上十分靈活多變,然而你如果想用VB寫一個多行文本,那可廢了老勁了:post

Dim s1 As String = "我是一個多行文本" & vbCrLf & "這是第二行"

Dim s2 As String = "我是一個多行文本" & vbCrLf & _
"這是第二行"

Dim s3 As String = _
"我是一個多行文本" & vbCrLf & _
"這是第二行"

由於VB沒有轉義符,並且當時的VB也不支持字符串內的換行功能,因此只能採用 vbCrLf 來鏈接字符。
若是想要鏈接下一行的代碼,還須要在行末添加一個 _ 字符,十分的繁瑣!設計

但是別忘了,如今都9102年了,VB早已經克服了不支持多行文本的缺點!
讓咱們看看如今如何利用VB的語法來定義多行文本吧!code


VS語法糖

首先,請先肯定你所使用的VS版本,只要版本夠新的話,VS的IDE就自動具有了多行文本的智能鏈接功能,因此下面的代碼是能夠直接運行的!xml

Dim s As String =
"我是一個多行文本
這是第二行"

MsgBox(s)

然而須要注意的是,==這種語法只是VS的語法糖而已,並非合法的VB代碼!==
你利用上面的代碼用VBC的編譯器是沒法編譯完成的,因此我還將介紹另外一個更神奇的多行文本方法!htm


String Tag

下面的方法僅適用於 .NET 3.5 之後的平臺,低於該版本的.NET沒法編譯與識別。對象

代碼以下:blog

Dim s As String = <string>我是一個多行文本
這是第二行</string>

MsgBox(s)

只需將字符串的聲明符號 "..." 換成 <string>...</string> 這個XML標籤,便可讓咱們的VB代碼支持多行文本!
須要注意的是,被 <string> 包裹的內容是包含空白符的,因此不要留下多餘的空格與空行。
內部的文本支持HTML轉義符,因此 < 符號須要以 &lt; 表示,> 須要以 &rt; 來表示。字符串

XML中的轉義符get

字符 轉義符
< &lt;
> &gt;
& &amp;
' &apos;
" &quot;

(其中只有 <& 是非法字符,須要嚴格轉義,但仍是建議您將其餘符號也一併轉義。)

若是你的文本中包含大量須要轉義的字符,則能夠直接使用 XML CDATA 來包覆文本

Dim s As String = <string><![CDATA[&我是一個多行文本&
<我麼得感情!>]]></string>

Msgbox(s)

其中被CDATA所包裹的文本能夠自由使用各類須要轉義的特殊字符,除告終尾的]]>以外!


LINQ XML

最後的最後,再來介紹一個小技巧:

' 定義一個結構原型
Structure xtag
    Sub New(ByVal p As String, ByVal c As String)
        Me.prop = p
        Me.cont = c
    End Sub
    Dim prop As String
    Dim cont As String
End Structure


Dim xtags As xtag() = {New xtag("屬性", "內容"), New xtag("test", "hello world")}
' 建立一個LINQ XML元素
Dim linqxml As Xml.Linq.XElement =
 <xml>
     <title>內嵌XML對象演示</title>
     <%= From x In xtags
         Select <xtag type=<%= x.prop %>><%= x.cont %></xtag>
     %>
     <endtag>結束XML</endtag>
 </xml>

MsgBox(linqxml.ToString)

原來在VB.NET中的XML標籤(並不是必定得是xml做爲根標籤)能夠直接定義一個Linq.XElement對象,並且其內部能夠利用LINQ + ASP.NET的語法對元素進行操做和賦值,十分的方便!

輸出的內容

<xml>
  <title>內嵌XML對象演示</title>
  <xtag type="屬性">內容</xtag>
  <xtag type="test">hello world</xtag>
  <endtag>結束XML</endtag>
</xml>

===

本文首發於 https://blog.clso.fun/posts/2019-04-23/vb-net-multi-line-string.html

相關文章
相關標籤/搜索