在 C# 2.0 中是否有等同于 Expression.Parameter 的东西
Is there an equivalent to Expression.Parameter in C# 2.0
我问是因为我正在尝试向后移植某些东西以与使用 C# 2.0 的 unity 一起使用。例如我有这样一行:
var patternSymbol = Expression.Parameter(typeof (T));
那么我可以替换一些我自己的代码来完成这项工作吗?注意:我可以随心所欲地改变一些东西,但是我离原始代码越远,我可能 运行 做的工作就越多。本质上,我需要在 C# 2.0.
中复制 Expression/Parameter 行为(来自 C# 3.0?)
(我是一个 C# 新手,发现很难找到像这样的历史问题的答案)。
您无法将此代码反向移植到 .NET 2.0,因为缺少整个 LINQ 子系统。 System.Linq.Expressions.Expression
class 已作为 C# 3.5 的 LINQ 的一部分引入,这是 .NET 框架向前迈出的一大步。
特别是,Expression.Parameter
本身并没有什么用处。通常,您会发现 Expression.Lambda
和 Compile
调用在代码的更下方,然后是对 Func<...>
的强制转换。模仿这些调用需要生成 CLR 代码,这几乎就像编写您自己的编译器一样。不过,这很少值得付出努力。
您需要查看旧代码的使用情况,并从头开始构建替代代码。例如,您可以将已编译的表达式替换为解释的表达式,这更容易构建(以较低的 运行 时间性能为代价)。无论如何,您最终会编写一个全新的子系统,而不仅仅是移植代码。
我问是因为我正在尝试向后移植某些东西以与使用 C# 2.0 的 unity 一起使用。例如我有这样一行:
var patternSymbol = Expression.Parameter(typeof (T));
那么我可以替换一些我自己的代码来完成这项工作吗?注意:我可以随心所欲地改变一些东西,但是我离原始代码越远,我可能 运行 做的工作就越多。本质上,我需要在 C# 2.0.
中复制 Expression/Parameter 行为(来自 C# 3.0?)(我是一个 C# 新手,发现很难找到像这样的历史问题的答案)。
您无法将此代码反向移植到 .NET 2.0,因为缺少整个 LINQ 子系统。 System.Linq.Expressions.Expression
class 已作为 C# 3.5 的 LINQ 的一部分引入,这是 .NET 框架向前迈出的一大步。
特别是,Expression.Parameter
本身并没有什么用处。通常,您会发现 Expression.Lambda
和 Compile
调用在代码的更下方,然后是对 Func<...>
的强制转换。模仿这些调用需要生成 CLR 代码,这几乎就像编写您自己的编译器一样。不过,这很少值得付出努力。
您需要查看旧代码的使用情况,并从头开始构建替代代码。例如,您可以将已编译的表达式替换为解释的表达式,这更容易构建(以较低的 运行 时间性能为代价)。无论如何,您最终会编写一个全新的子系统,而不仅仅是移植代码。