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>
===
本文首发于
下一篇: 我在穿鞋