在 .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的IDE就自動具有了多行文本的智能鏈接功能,因此下面的代碼是能夠直接運行的!xml
Dim s As String = "我是一個多行文本 這是第二行" MsgBox(s)
然而須要注意的是,==這種語法只是VS的語法糖而已,並非合法的VB代碼!==
你利用上面的代碼用VBC的編譯器是沒法編譯完成的,因此我還將介紹另外一個更神奇的多行文本方法!htm
下面的方法僅適用於 .NET 3.5
之後的平臺,低於該版本的.NET沒法編譯與識別。對象
代碼以下:blog
Dim s As String = <string>我是一個多行文本 這是第二行</string> MsgBox(s)
只需將字符串的聲明符號 "..."
換成 <string>...</string>
這個XML標籤,便可讓咱們的VB代碼支持多行文本!
須要注意的是,被 <string>
包裹的內容是包含空白符的,因此不要留下多餘的空格與空行。
內部的文本支持HTML轉義符,因此 <
符號須要以 <
表示,>
須要以 &rt;
來表示。字符串
XML中的轉義符get
字符 | 轉義符 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |
(其中只有 <
與 &
是非法字符,須要嚴格轉義,但仍是建議您將其餘符號也一併轉義。)
若是你的文本中包含大量須要轉義的字符,則能夠直接使用 XML CDATA 來包覆文本
Dim s As String = <string><![CDATA[&我是一個多行文本& <我麼得感情!>]]></string> Msgbox(s)
其中被CDATA所包裹的文本能夠自由使用各類須要轉義的特殊字符,除告終尾的]]>
以外!
最後的最後,再來介紹一個小技巧:
' 定義一個結構原型 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