用roslyn扩展c#语法

Mat*_*ger 5 c# 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Dud*_*eti 1

如果您可以为此生成正确的 IL,那么这应该可行。因为这不是新的 CLR 功能,所以您不需要对 dot net core 执行任何操作,只需使用 Roslyn。

为此,您有两种选择,

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

第二个选项是添加将新语法编译到您自己的 Roslyn 中并用它编译代码的功能,因为 Roslyn 是开源的。

  • 您能否详细解释一下“将新语法重写为相应的 C# 语法并按常规进行编译”的含义?您的意思是使用 Roslyn 这样做吗?我试图找出是否可以使用 Roslyn 以透明的方式执行此操作(即它不会显示为某种 IDE 建议,但转换在编译时透明地发生?) (2认同)