用roslyn扩展c#语法

我正在尝试在没有else的情况下实现“return if”/“return value if”,因为我只想在条件有效时返回或返回值。

我知道,有if (condition) return; 或者if (condition) return value; 但是我希望代码更清晰一点,因为它更具可读性,所以拥有这种语法会很好。

我听说过roslyn这是可能的,并在这里回答问题: 有没有办法在C#中实现自定义语言function? 但我不知道如何实现它。

所以代码将是这样的:

 public class Testclass { public static void Main(String[] args) { Testclass t = new Testclass(); t.TestMyClassWithVoid(); bool success = t.TestMyClassWithInt(3) == 3; bool fail = t.TestMyClassWithInt(2) == 2; } public void TestMyClassWithVoid() { int value = GetValueFromSomeWhere(); return if value == 3; DoSomeOtherStuffSinceValueIsNotThree(); } public int TestMyClassWithInt(int value) { return value if value == 3; DoSomeOtherStuffSinceValueIsNotThree(); return -1; } } 

任何想法我怎么能解决这个问题? 我开始尝试使用Roslyn.Compilers.CSharp -namespace,但我不知道如何开始实现。

如果你可以为此生成正确的IL,这应该是有效的。 因为这不是一个新的CLRfunction,所以你不需要做点网核,只需要Roslyn。

要做到这一点,你有两个选择,

一种是按原样保留Roslyn并将新语法重写为相应的C#语法,然后按常规编译。

第二个选项,因为Roslyn是一个开源的,就是添加了将新语法编译到自己的Roslyn并使用它编译代码的能力。

这是一个替代建议,可能适用于正在寻找扩展点到roslyn的人。 它甚至可以作为nuget包提供! 为您的语法创建分析器和代码修复提供程序。

基本上你会得到的是你选择的任何语法下的红色波浪线,并带有自动修复提示,可以让你将它转换为常规的C#等价物。

它还可以用于validation库的使用情况,检查正确的属性是否在正确的位置,检测常见的代码异味等。

在这篇文章中阅读有关代码分析器的更多信息: https : //msdn.microsoft.com/en-us/magazine/dn879356.aspx

该链接的快速摘要(但绝不是替代):

  • 安装VS SDK,Roslyn SDK,编译器平台SDK
  • 创建新项目:使用Code Fix(NuGet + VSIX)模板进行分析。
  • 关于如何创建分析器/代码修复提供程序,将有3个示例
  • 将VSIX项目设置为启动项目并运行