使用Roslyn C#语法工厂时如何转义变量名?
所以我使用Roslyn SyntaxFactory生成C代码 在使用使用Roslyn C#语法工厂时如何转义变量名?,c#,code-generation,roslyn,C#,Code Generation,Roslyn,所以我使用Roslyn SyntaxFactory生成C代码 在使用IdentifierName(string)生成变量名时,是否有方法转义变量名 要求: 如果支持Unicode就好了,但我想ASCII就足够了 如果是可逆的就好了 对于相同的输入总是相同的结果(“a”总是“a”) 每个输入的唯一结果(“a?”->“a”不能与“a!”->“a”相同) 可以从一个特殊字符转换为多个单个字符 API文档的含义似乎是,这里需要一个有效的C#标识符,因此Roslyn不会为您提供转义机制。因此,您需要定义
IdentifierName(string)
生成变量名时,是否有方法转义变量名
要求:
- 如果支持Unicode就好了,但我想ASCII就足够了
- 如果是可逆的就好了
- 对于相同的输入总是相同的结果(“a”总是“a”)
- 每个输入的唯一结果(“a?”->“a”不能与“a!”->“a”相同)
- 可以从一个特殊字符转换为多个单个字符
- API文档的含义似乎是,这里需要一个有效的C#标识符,因此Roslyn不会为您提供转义机制。因此,您需要定义一个字符串转换,以实现您想要的
这样做的方法是看看其他事物是如何做到这一点的。看看HTML实体,它们总是使用
&
引入。它们总是很容易区分,而且还有一种方法可以对文本&
进行编码,这样就不会限制可渲染字符集。或者考虑C字符串如何允许通过使用<代码> \//>代码>在字符串中包含字符串分隔符和其他特殊字符。
您需要选择一个在C#标识符中有效的字符作为表示要编码的非标识符字符之一的序列的“标记”,以及允许该字符也被表示的方法。然后为每个编码字符的标记后面的内容制作一个映射表。如果您想使用所有的Unicode,最简单的方法可能是只使用Unicode代码点编号。结果标识符可能不是很可读,但在您的用例中这可能并不重要
一旦你有了一个合适的系统,编写一个字符串转换函数来实现它应该是非常简单的。你在寻找哪种类型的转义?我想转义一个字符串作为变量名使用。e、 g.
as-.d、as.d、as-.d、
在某些形式下应可用作变量名,具体取决于您需要它的原因。。。如果您只是在以后引用变量时才需要它,那么只需在变量声明中添加一个,并使用一个唯一的变量名,而不是您的具体要求是什么?逃逸必须是可逆的吗?它必须是独一无二的吗?(例如,a-
和a.
是否必须生成不同的名称?)它是否必须支持所有Unicode,或者ASCII是否足够?