使用 Roslyn C# 语法工厂时如何转义变量名?
How to escape variable name when using Roslyn C# Syntax Factory?
所以我正在使用 Roslyn SyntaxFactory 生成 C# 代码。
在使用 IdentifierName(string)
生成变量名时,有没有办法让我转义变量名?
要求:
- 如果支持 Unicode 就好了,但我想 ASCII 就足够了
- 要是能反着就好了
- 相同输入总是相同的结果("a" 总是 "a")
- 每个输入的唯一结果("a?"->"a_" 不能与 "a!"->"a_" 相同)
- 可以从 1 个特殊字符转换为多个单个字符
API 文档的含义似乎是它需要一个有效的 C# 标识符,因此 Roslyn 不会为您提供转义机制。因此,您需要定义一个字符串转换以实现您想要的效果。
做这件事的方法是看看其他东西是如何做到的。查看 HTML 个实体,它们总是使用 &
引入。它们始终可以轻松区分,并且还有一种方法可以对文字 &
进行编码,这样您就不会限制可渲染字符集。或者考虑 C# 字符串如何允许您通过使用 \
.
在字符串中包含字符串分隔符和其他特殊字符
您需要选择一个在 C# 标识符中有效的字符作为您的 'marker' 序列,该序列表示您要编码的非标识符字符之一,以及允许该字符的方法也被代表。然后为每个编码字符的标记之后的内容创建一个映射 table。如果你想做所有的 Unicode,最简单的方法可能是只使用 Unicode 代码点数字。生成的标识符可能不太易读,但在您的用例中可能并不重要。
一旦你有了一个 suitable 系统,编写一个实现它的字符串转换函数应该非常简单。
所以我正在使用 Roslyn SyntaxFactory 生成 C# 代码。
在使用 IdentifierName(string)
生成变量名时,有没有办法让我转义变量名?
要求:
- 如果支持 Unicode 就好了,但我想 ASCII 就足够了
- 要是能反着就好了
- 相同输入总是相同的结果("a" 总是 "a")
- 每个输入的唯一结果("a?"->"a_" 不能与 "a!"->"a_" 相同)
- 可以从 1 个特殊字符转换为多个单个字符
API 文档的含义似乎是它需要一个有效的 C# 标识符,因此 Roslyn 不会为您提供转义机制。因此,您需要定义一个字符串转换以实现您想要的效果。
做这件事的方法是看看其他东西是如何做到的。查看 HTML 个实体,它们总是使用 &
引入。它们始终可以轻松区分,并且还有一种方法可以对文字 &
进行编码,这样您就不会限制可渲染字符集。或者考虑 C# 字符串如何允许您通过使用 \
.
您需要选择一个在 C# 标识符中有效的字符作为您的 'marker' 序列,该序列表示您要编码的非标识符字符之一,以及允许该字符的方法也被代表。然后为每个编码字符的标记之后的内容创建一个映射 table。如果你想做所有的 Unicode,最简单的方法可能是只使用 Unicode 代码点数字。生成的标识符可能不太易读,但在您的用例中可能并不重要。
一旦你有了一个 suitable 系统,编写一个实现它的字符串转换函数应该非常简单。