1

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

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

安装脚本如下所示:

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

这个想法是用户脚本可以使用常见的类型,例如MathException不必先导入它们。

我还希望 LINQ 开箱即用,因此我将最后一行添加到设置脚本中。但是,虽然常规导入工作正常,但扩展导入却不行。据我所知,常规导入成为脚本范围的一部分,因此可用于在同一范围内运行的任何后续脚本。然而,扩展导入的工作方式似乎有所不同。

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

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

4

1 回答 1

0

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

于 2015-03-24T14:05:37.550 回答