vbCrLf
在 .NET 刚刚推出的时候, VB 作为一款被微软用来 "衬托"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 早已经克服了不支持多行文本的缺点!
VS 语法糖
首先, 请先确定你所使用的 VS 版本, 只要版本够新的话, VS 的 IDE 就自动具备了多行文本的智能连接功能, 所以下面的代码是可以直接运行的!
Dim s As String =
" 我是一个多行文本
这是第二行 "
MsgBox(s)
然而需要注意的是,== 这种语法只是 VS 的语法糖而已, 并不是合法的 VB 代码!==
String Tag
下面的方法仅适用于 .NET 3.5 以后的平台, 低于该版本的. NET 无法编译与识别.
代码如下:
Dim s As String = 我是一个多行文本
这是第二行
MsgBox(s)
只需将字符串的声明符号 "..." 换成 ... 这个 xml 标签, 即可让我们的 VB 代码支持多行文本!
包裹的内容是包含空白符的, 所以不要留下多余的空格与空行.
需要以 &rt; 来表示.
xml 中的转义符
字符 转义符 <<> > & & ''" "
(其中只有 <与 & 是非法字符, 需要严格转义, 但还是建议您将其他符号也一并转义.)
如果你的文本中包含大量需要转义的字符, 则可以直接使用 xml CDATA 来包覆文本
- Dim s As 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 =
- <%= From x In xtags
- Select><%= x.cont %>
- %>
结束 xml
MsgBox(linqxml.ToString)
原来在 VB.NET 中的 xml 标签 (并非一定得是 xml 作为根标签) 可以直接定义一个 Linq.XElement 对象, 而且其内部可以利用 LINQ + ASP.NET 的语法对元素进行操作和赋值, 十分的方便!
输出的内容
内容
hello world
结束 xml
===
本文首发于 https://blog.clso.fun/posts/2019-04-23/vb-net-multi-line-string.html
来源: https://www.2cto.com/kf/201904/805323.html