是否与C#2.0中的Expression.Parameter等效

时间:2015-02-01 08:30:53

标签: c# delegates

我问,因为我试图将某些内容用于使用C#2.0的Unity。例如我有这样一句话:

var patternSymbol = Expression.Parameter(typeof (T));

那么我可以替换一些自己的代码来完成这项工作吗?注意:我可以随意更改内容,但是我越远离原始代码,我可能遇到的工作就越多。基本上我需要在C#2.0中复制表达式/参数行为(来自C#3.0?)。

(我有点像C#新手,发现现在很难找到像这样的历史问题的答案。)

1 个答案:

答案 0 :(得分:1)

您无法将此代码反向移植到.NET 2.0,因为缺少整个LINQ子系统。 System.Linq.Expressions.Expression类作为LINQ的一部分引入了C#3.5,这是.NET框架的一大进步。

特别是Expression.Parameter本身并不有用。通常情况下,您会在代码中找到Expression.LambdaCompile次调用,然后转换为Func<...>。模仿这些调用需要生成CLR代码,这几乎就像编写自己的编译器一样。但是,这很难付出努力。

您需要查看旧代码的使用方式,并从头开始构建替代代码。例如,您可以使用已解释的表达式替换已编译的表达式,这样可以更容易构建(以较低的运行时性能为代价)。无论如何,你最终会编写一个全新的子系统,而不仅仅是移植代码。