使用Roslyn C#语法工厂时如何转义变量名?

时间:2017-02-21 12:24:27

标签: c# code-generation roslyn

所以我使用Roslyn SyntaxFactory生成C#代码。

使用IdentifierName(string)生成变量名时,有没有办法让我能够转义变量名?

要求:

  • 如果支持Unicode会很好,但我认为ASCII就足够了
  • 如果它是可逆的那就太好了
  • 相同输入的结果总是相同(“a”总是“a”)
  • 每个输入的唯一结果(“a?” - >“a_”不能与“a!”相同 - >“a _”)
  • 可以从1个特殊字符转换为多个单个字符

1 个答案:

答案 0 :(得分:1)

API文档的含义似乎是它需要一个有效的C#标识符,所以Roslyn不会为你提供一个转义机制。因此,您需要定义一个字符串转换,以便达到您想要的效果。

这样做的方法是看看其他事情是如何做到的。查看HTML实体,这些实体始终使用&引入。它们总是可以轻松区分,并且还可以对文字&进行编码,以便您不会限制可渲染字符集。或者考虑C#字符串如何允许您通过使用\在字符串中包含字符串分隔符和其他特殊字符。

您需要选择一个在C#标识符中有效的字符作为您的标记'表示要编码的非标识符字符之一的序列,以及允许表示该字符的方法。然后为每个编码字符的标记后面的内容制作一个映射表。如果您想要完成所有Unicode,最简单的方法可能就是使用Unicode代码点编号。生成的标识符可能不是非常易读,但在您的用例中可能并不重要。

一旦你有一个合适的系统,编写一个实现它的字符串转换函数应该非常简单。