vbCrLf 在 .NET 剛剛推出的時候,VB作為一款被微軟用來“襯托”C 的語言,在許多細節設計上遠不如C 方便。 比如在C 中寫一個多行文本,就有各種方式: 可以看出C 在字元的賦值寫法上十分靈活多變,然而你若是想用VB寫一個多行文本,那可廢了老勁了: 因為VB沒有轉義符,而且當時的VB也不支 ...
vbCrLf
在 .NET 剛剛推出的時候,VB作為一款被微軟用來“襯托”C#的語言,在許多細節設計上遠不如C#方便。
比如在C#中寫一個多行文本,就有各種方式:
string s1 = "我是一個多行文本\n這是第二行";
string s2 = @"我是一個多行文本
這是第二行";
string s3 =
@"我是一個多行文本
這是第二行";
可以看出C#在字元的賦值寫法上十分靈活多變,然而你若是想用VB寫一個多行文本,那可廢了老勁了:
Dim s1 As String = "我是一個多行文本" & vbCrLf & "這是第二行"
Dim s2 As String = "我是一個多行文本" & vbCrLf & _
"這是第二行"
Dim s3 As String = _
"我是一個多行文本" & vbCrLf & _
"這是第二行"
因為VB沒有轉義符,而且當時的VB也不支持字元串內的換行功能,所以只能採用 vbCrLf
來連接字元。
如果想要連接下一行的代碼,還需要在行末添加一個 _
字元,十分的繁瑣!
可是別忘了,現在都9102年了,VB早已經剋服了不支持多行文本的缺點!
讓我們看看現在如何利用VB的語法來定義多行文本吧!
VS語法糖
首先,請先確定你所使用的VS版本,只要版本夠新的話,VS的IDE就自動具備了多行文本的智能連接功能,所以下麵的代碼是可以直接運行的!
Dim s As String =
"我是一個多行文本
這是第二行"
MsgBox(s)
然而需要註意的是,==這種語法只是VS的語法糖而已,並不是合法的VB代碼!==
你利用上面的代碼用VBC的編譯器是無法編譯完成的,所以我還將介紹另一個更神奇的多行文本方法!
String Tag
下麵的方法僅適用於 .NET 3.5
以後的平臺,低於該版本的.NET無法編譯與識別。
代碼如下:
Dim s As String = <string>我是一個多行文本
這是第二行</string>
MsgBox(s)
只需將字元串的聲明符號 "..."
換成 <string>...</string>
這個XML標簽,即可讓我們的VB代碼支持多行文本!
需要註意的是,被 <string>
包裹的內容是包含空白符的,所以不要留下多餘的空格與空行。
內部的文本支持HTML轉義符,所以 <
符號需要以 <
表示,>
需要以 &rt;
來表示。
XML中的轉義符
字元 | 轉義符 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |
(其中只有 <
與 &
是非法字元,需要嚴格轉義,但還是建議您將其他符號也一併轉義。)
如果你的文本中包含大量需要轉義的字元,則可以直接使用 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