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>
===
本文首发于 https://blog.clso.fun/posts/2019-04-23/vb-net-multi-line-string.html
VB.NET 定义多行文本字符的几种方式的更多相关文章
- Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式
解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式.面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和Out ...
- PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式)
PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式) 一.总结 一句话总结: 1.强制转换:(int) (bool) (float) (string) (array) (object) 2 ...
- Spring Boot 定义系统启动任务,你会几种方式?
在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...
- char wchar 互转 多字符 宽字符 的N种方式
1: 用 CString 如果没有mfc 可以用 ATL 中的 CString #include <atlstr.h> CStringA v1 = "111&quo ...
- PHP定义字符串的四种方式
1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区 ...
- javaScript中定义类或对象的五种方式
第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Obj ...
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
js replace 全局替换 js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
随机推荐
- leetcode142
public class Solution { public ListNode detectCycle( ListNode head ) { if( head == null || head.next ...
- TCP与UDP,可靠UDP如何实现
两种协议都是传输层协议,为应用层提供信息载体. TCP协议是基于连接的字节流的可靠协议,有三次握手,四次挥手,超时重传,流量控制(滑动窗口),拥塞控制和差错控制,也正因为有可靠性的保证和控制手段,所以 ...
- openwrt从18.0.1降级回到17.0.6遇到的问题
因为觉得openwrt的18的配置检查功能很费时,特别是遇到ar93xx慢的真可以,所以决定从18.0.1降回到17.0.6上 先把18.0.1的配置backup出来,然后刷17.0.6,再把back ...
- Hibernate 再接触 性能优化
Sessionclear 否则session缓存里越来越多 Java有内存泄露吗? 在语法中没有(垃圾自动回收) 但是在实际中会有 比如读文件没有关什么的 1+N问题 解决方法:把fetch设置为la ...
- jquery 找同胞系列siblings() ,next() ,nextAll(), nextUntil(), prev(), prevAll(), prevUntil()
注:expr是指可选的参数,包含用于匹配元素的选择器表达式. .siblings(expr) ---查找所有兄弟(包括哥哥和弟弟) .next(expr) ---查找紧挨着的弟弟 .nextAll(e ...
- 前端 跨Area后Cookie无法访问
创建两个区域,一个是User,一个是Manage. User区域有两个页面,index1,和index2 User区域: index1:负责写入cookie index2:负责读取cookie Man ...
- gitlab 备份与恢复
1. gitlab 备份命令:# gitlab-rake gitlab:backup:create 1.1 查看备份文件(默认备份路径:/var/opt/gitlab/backups)# ls /va ...
- etcd集群部署与遇到的坑
在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一下,为了以后更好操作. ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群 ...
- web项目局部打印
window.print()方法是打印整个body,若想打印局部区域,网上出现了各种解决办法,我觉得都挺好的.我最推荐jquery.PrintArea.js插件形式 点击上述链接首先下载下来,我的是版 ...
- 298. Binary Tree Longest Consecutive Sequence最长连续序列
[抄题]: Given a binary tree, find the length of the longest consecutive sequence path. The path refers ...