我问,因为我试图将某些内容用于使用C#2.0的Unity。例如我有这样一句话:
var patternSymbol = Expression.Parameter(typeof (T));
那么我可以替换一些自己的代码来完成这项工作吗?注意:我可以随意更改内容,但是我越远离原始代码,我可能遇到的工作就越多。基本上我需要在C#2.0中复制表达式/参数行为(来自C#3.0?)。
(我有点像C#新手,发现现在很难找到像这样的历史问题的答案。)
答案 0 :(得分:1)
您无法将此代码反向移植到.NET 2.0,因为缺少整个LINQ子系统。 System.Linq.Expressions.Expression
类作为LINQ的一部分引入了C#3.5,这是.NET框架的一大进步。
特别是Expression.Parameter
本身并不有用。通常情况下,您会在代码中找到Expression.Lambda
和Compile
次调用,然后转换为Func<...>
。模仿这些调用需要生成CLR代码,这几乎就像编写自己的编译器一样。但是,这很难付出努力。
您需要查看旧代码的使用方式,并从头开始构建替代代码。例如,您可以使用已解释的表达式替换已编译的表达式,这样可以更容易构建(以较低的运行时性能为代价)。无论如何,你最终会编写一个全新的子系统,而不仅仅是移植代码。