关于使用Roslyn添加C#语法糖的两部分问题:
首先,是否可以使用Roslyn向C#添加新语法,或者它是否始终必须是从有效C#到其他有效C#的转换?例如,我想做一些像VB.NET的XML文字:
XElement lvalue = <some><xml /></some>;
是否可以在编译时将其转换为:
XElement lvalue = new XElement("some", new XElement("xml")); // or whatever
其次,如果可能,那对用户来说是什么样的?我可以这样做,以便编写第一个表达式,并且永远不会看到转换到第二个表达式(它在编译时透明地发生)?或者,Roslyn语法转换必须像IDE一样出现&#34;重构建议&#34;?我对Roslyn的文档不清楚。
答案 0 :(得分:9)
首先,是否可以使用Roslyn向C#添加新语法
不。
还是总是必须从有效的C#转换为其他有效的C#?
是的。
Roslyn是一个C#/ VB分析引擎;这些是它分析的唯一语言。扩展C#或VB语言不。
C#编译器是在相当宽松的许可下开源的。如果你想编写自己的版本,你当然可以分叉存储库并使解析器做你喜欢的任何事情。
答案 1 :(得分:2)
如果必须查看您提供的代码段然后没有(无需解决一些更大的问题),但是您可以沿着stackoverflow went with for localisation
的类似路线走下去你可以介绍像_x("<some><xml /></some>")
这样的东西,你在语法方面没有太大的好处(因为你可以有一个解析这个的运行时方法),但你可以让Roslyn接受更换的工作它具有您希望它生成的确切代码。