我正在尝试在没有else的情况下实现“return if”/“return value if”,因为我只想在条件有效时返回或返回值。
我知道,有if (condition) return;
或if (condition) return value;
,但我想让代码更清晰一点,因为它更具可读性,所以拥有这种语法会很好。
我听说过roslyn这是可能的,并在这里回答问题:Is there a way to implement custom language features in 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
- 命名空间,但我不知道如何开始实现。
答案 0 :(得分:1)
如果您可以为此生成正确的IL,这应该可行。 因为这不是一个新的CLR功能,所以你不需要做点网核,只需要Roslyn。
要做到这一点,你有两个选择,
一种方法是按原样保留Roslyn并将新语法重写为相应的C#语法,然后按常规编译。
第二个选项,因为Roslyn是一个开源的,就是添加了将新语法编译到自己的Roslyn并使用它编译代码的能力。
答案 1 :(得分:0)
这是一个替代建议,可能适用于正在寻找扩展点到roslyn的人。它甚至可以作为nuget包提供!为您的语法创建分析器和代码修复提供程序。
基本上你会得到的是你选择的任何语法下的红色波浪线,并带有自动修复提示,可以让你将它转换为常规的C#等效物。
它还可以用于验证库的使用情况,检查正确的属性是否在正确的位置,检测常见的代码气味等。
在这篇文章中阅读有关代码分析器的更多信息:https://msdn.microsoft.com/en-us/magazine/dn879356.aspx
该链接的快速摘要(但绝不是替代):