欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

VB.NET 定义多行文本字符的几种方式

程序员文章站 2022-03-20 12:44:22
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转义符,所以 < 符号需要以 &lt; 表示,> 需要以 &rt; 来表示。

xml中的转义符

字符 转义符
< &lt;
> &gt;
& &amp;
' &apos;
" &quot;

(其中只有 <& 是非法字符,需要严格转义,但还是建议您将其他符号也一并转义。)

如果你的文本中包含大量需要转义的字符,则可以直接使用 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>

===

本文首发于