如何为嵌入式IronPython脚本启用LINQ

时间:2012-08-10 15:10:29

标签: extension-methods ironpython

我的应用程序可以通过用户提供的IronPython脚本进行扩展。

  • 首先,我创建了一个新的ScriptScope
  • 使用该脚本范围,我运行一个简短的安装脚本,执行一些便利导入。
  • 最后,我在准备好的范围内运行所有用户脚本。

设置脚本如下所示:

import clr
import System
from System import Exception
from System import Math
clr.ImportExtensions(System.Linq.Enumerable)

我们的想法是,用户脚本可以使用MathException等常见类型,而无需先导入它们。

我也希望LINQ能够开箱即用,所以我将最后一行添加到了安装脚本中。但是,虽然常规导入工作正常,但扩展导入却没有。根据我的想法,常规导入成为脚本范围的一部分,因此可用于在同一范围内运行的任何后续脚本。但是,扩展导入的效果似乎不同。

所以我的问题是:我执行的脚本如何使用LINQ而不必显式导入扩展方法?

注意:有很多脚本,其中许多只包含一个表达式。因此,我宁愿避免使用扩展名导入自动为每个脚本添加前缀的性能损失。

1 个答案:

答案 0 :(得分:0)

在IL中查看Reflector或ILSpy中的LINQ语句。 LINQ是工作中的编译器魔术,它将语句转换为一堆类和方法调用。你永远不会让LINQ工作。你最好的选择是一个包装类,为你做一些与LINQ相关的工作。关注您尝试提供的实际用例,并提供Helper方法来完成工作。