VB.NET 定义多行文本字符的几种方式
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>
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。