欢迎光临散文网 会员登陆 & 注册

可能你不知道的沙雕 C# 写法(3):字符串也是有语义分析的哦

2022-09-11 17:07 作者:SunnieShine  | 我要投稿

大家都知道,C# 一共使用多种字符串格式的字面量来声明字符串:

  • 普通字符串字面量:"This is a string."

  • 原义字符串字面量:@"This is a verbatim string."

  • 内插字符串字面量:$"This is an interpolated string with value {nameof(variable)} = {variable}."

  • 带内插的原义字符串字面量:$@"String value."@$"String value."

  • 原生字符串字面量:"""This is a raw string literal."""

  • 带内插的原生字符串字面量:$"""Interpolated string: {nameof(variable)} = {variable}"""

当然,这不是在给各位科普字面量格式。今天是给大家说一个特殊的语法识别规则。

平时可能你会经常用到一些别的语言的语法,然后以字符串形式镶嵌进 C# 代码里去的情况。比如说我想写一个 JSON 字符串:

比如这样的内容。但有些时候,因为字符串的特殊性,它只是用来呈现字符的序列用的,所以它不一定会被编译器识别成别的语言,毕竟 C# 编译器只管 C# 的语法,对吧。所以,假设我在里面插入了一些别的字符导致 JSON 字符串不合规之后,可能就很难被看出来,比如冒号写成中文的了。

我在标记注释的地方插入了一个中文的冒号。这很难被发现对吧。

实际上,Visual Studio 提供了一个潜规则,可以为字符串按照一些特定语言的语法进行特殊着色处理,就跟 IDEA 处理 Java 的时候一样。但是,Visual Studio 的规则是这样的:

你需要在这样的本地变量(临时变量)的上面加上一行注释:// lang = 语言

举个例子。我们在这段代码上加一个 // lang = json 看看:


你就会发现,Visual Studio 对这段 JSON 上色了。(虽然有点丑……但是颜色是可以自己在设置里调整的,这个问题不大)

你可以看到,在错误冒号所在行上,产生了一段警告波浪线。我们将鼠标放上去可以发现,Visual Studio 告诉了我们,这段 JSON 是错误的,因为冒号不合法:

“JSON issue: Property name must be followed by a ':'”,这句话的意思是“JSON 问题:属性名字后面必须跟着一个‘:’”。注意这个解释文字里的冒号是英语的。

看到了吗,C# 还有这种操作,神奇不神奇?而且,它对多种字符串字面量格式都支持。比如最新的原生字符串字面量:

甚至是别的语言,比如正则表达式(匹配身份证编号的):

不过,还是有很多不支持的语言的代码,比如 Markdown 啊、SQL 等等。但是我相信,Visual Studio 已经在着手开始完成对这些语法着色进行实现了。相信不久以后,Visual Studio 会对这些东西支持得越来越多、越来越好。

可能你不知道的沙雕 C# 写法(3):字符串也是有语义分析的哦的评论 (共 条)

分享到微博请遵守国家法律