C# 将语句转换为表达式
我正在寻找如何将代码转换为C#for Unity中的表达式的想法。我们有一个基本的声明列表: 简单陈述:C# 将语句转换为表达式,c#,optimization,unity3d,C#,Optimization,Unity3d,我正在寻找如何将代码转换为C#for Unity中的表达式的想法。我们有一个基本的声明列表: 简单陈述: 分配:A:=A+5 电话:CLEARSCREEN() 返回:返回5 复合语句: if语句:如果A>3,则写入(A)else WRITELN(“尚未”);结束 switch语句:switch(c){case'a':alert();break;case'q':quit();break;} while循环:while NOT EOF DO begin READLN end do循环:do{c
- 分配:A:=A+5
- 电话:CLEARSCREEN()
- 返回:返回5李>
- if语句:如果A>3,则写入(A)else WRITELN(“尚未”);结束
- switch语句:switch(c){case'a':alert();break;case'q':quit();break;}
- while循环:while NOT EOF DO begin READLN end
- do循环:do{computation(&i);}while(i<10)李>
- for循环:for A:=1到10 do WRITELN(A)end
int a = 100;
可转换为:
((a = 100) == a)
但这并不完美,因为在IL代码中没有优化比较。我还尝试:
((a = 100) is int)
这会引发警告,比较已优化,但分配也已删除。还有其他只在IL代码中生成赋值的想法吗
呼叫
调用会自动转换为表达式,对吗?嗯,不完全是这样。如何链接一个空函数
此外,如果通过引用传递参数,则需要表达式外部的变量
返回
这个是直接转换的:
return 5;
(5)
If和Switch语句
?:运算符将替换它们:
if (a == 5) { b = "yes"; } else { b = "no"; }
((a == 5) ? "yes" : "no")
While、Do和For循环
如果迭代次数固定,这里可以使用循环展开 你是说使用表达式树?表达式树?我可以尝试一下,但我不确定这是否在所有Unity平台上都得到了充分支持,而不是从我所读到的内容来看。此外,代码看起来比使用简单操作更笨重。不知道编译器是如何优化的,对基本运算符有什么好处吗?还添加了另一个库,可能对移动设备等很重要。我会做更多的调查,但可能不是我想要的。我的意思是,你所做的可以使用表达式树来完成(如上所述)。但我可能对这个问题有点困惑。你只是想把表达式编译成可运行的代码吗?听起来你想要表达树。你可以用纯IL来做,但你会发现这是一个单调乏味的练习,直到你得到大量的练习。表达式树至少有意义(经过一段短的学习曲线)。当然,表达式树是可以编译的,所以它比反射快得多。我试图实现的是非常简单的,用一行代码替换几行代码。。。甚至更小,一个表达式。表达式树听起来是一个很好的解决方案,感谢您提及它们,但在实践中,在Unity中,它们可能会引入其他问题。我必须了解更多关于它们的信息,进行测试,阅读生成的IL代码,配置文件,并测量播放器大小,以确定这些是否值得。相反,毫无疑问,使用基本语言操作符的标准表达式将提供我现在所需要的。我只需要从语句中进行转换。