繁体   English   中英

用roslyn扩展c#语法

[英]extending c# syntax with roslyn

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

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

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

所以代码将是这样的:

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,这应该是有效的。 因为这不是一个新的CLR功能,所以你不需要使用dot net core做任何事情,只需要Roslyn。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM