在 .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