Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将语句转换为表达式_C#_Optimization_Unity3d - Fatal编程技术网

C# 将语句转换为表达式

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

我正在寻找如何将代码转换为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{computation(&i);}while(i<10)
  • for循环:for A:=1到10 do WRITELN(A)end
替换这些语句的表达式应该链接起来,例如使用And运算符(expression1&&expression2&&..expresionN),这样执行顺序就得到了尊重。还允许使用?:运算符

作业

如果我们有此声明:

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代码,配置文件,并测量播放器大小,以确定这些是否值得。相反,毫无疑问,使用基本语言操作符的标准表达式将提供我现在所需要的。我只需要从语句中进行转换。