[英]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
该链接的快速摘要(但绝不是替代):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.