F#(或C#)中有没有类似Python三重引号的东西?
我想把一段 XML 代码放到一个字符串变量里。在 Python 中,我可以用三重引号来做到这一点,这样就不用担心单引号或双引号的问题。请问在 F# 或 C# 中有没有类似的方法呢?
5 个回答
如果有人在找C#中的三重引号字符串(而不是F#),那么C#11现在有了原始字符串字面量,我觉得它们比Python的更好(因为处理缩进的方式)!
原始字符串字面量是一种新的字符串格式。原始字符串字面量可以包含任意文本,包括空格、换行、嵌入的引号和其他特殊字符,而不需要使用转义序列。一个原始字符串字面量至少以三个双引号(""")开始,并以相同数量的双引号结束。通常,原始字符串字面量在一行中用三个双引号开始,在另一行中用三个双引号结束。开头引号后和结尾引号前的换行符不会包含在最终内容中:
string longMessage = """ This is a long message. It has several lines. Some are indented more than others. Some should start at the first column. Some have "quoted text" in them. """;
在结尾双引号左侧的任何空格都会从字符串字面量中删除。原始字符串字面量可以与字符串插值结合使用,以在输出文本中包含大括号。多个
$
字符表示连续的大括号开始和结束插值的数量:var location = $$""" You are at {{{Longitude}}, {{Latitude}}} """;
前面的例子说明了两个大括号开始和结束插值。第三个重复的开闭大括号会包含在输出字符串中。
https://devblogs.microsoft.com/dotnet/csharp-11-preview-updates/#raw-string-literals https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-11#raw-string-literals
F# 3.0 版本支持三重引号字符串。你可以查看 Visual Studio F# 团队博客关于 3.0 特性的文章。
在 F# 3.0 规范 的 字符串和字符 部分特别提到了 XML 的使用场景:
三重引号字符串是用三个引号(""")来表示的,这样可以确保包含一个或多个转义字符串的字符串被逐字解释。举个例子,三重引号字符串可以用来嵌入 XML 数据:
据我所知,C# 和 F# 中没有对应的语法。如果你使用 @"str"
,那么你需要把引号替换成两个引号;如果你只是用 "str"
,那么你需要加反斜杠。
无论如何,"
的编码方式是这样的:
var str = @"allows
multiline, but still need to encode "" as two chars";
var str = "need to use backslahs \" here";
不过,当你需要在应用程序中嵌入大字符串(比如 XML 数据)时,最好的办法可能是使用 .NET 资源(或者根据你的应用把数据存储在其他地方)。在程序中嵌入大字符串通常不是很推荐。此外,曾经有一个插件可以把 XML 作为树结构粘贴,这样可以构建 XElement
对象用于 C#,但我不确定这个插件现在是否还存在。
不过,我个人会支持在 F# 中添加 """
,就像 Python 中那样 - 这非常有用,特别是在交互式脚本中。