1

私のアプリケーションは、ユーザーが提供する IronPython スクリプトを介して拡張できます。

  • まず、新しい を作成しますScriptScope
  • そのスクリプト スコープを使用して、便利なインポートを実行する短いセットアップ スクリプトを実行します。
  • 最後に、準備したスコープですべてのユーザー スクリプトを実行します。

セットアップ スクリプトは次のようになります。

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

アイデアは、ユーザー スクリプトが共通の型を使用できるMathException、最初にそれらをインポートする必要がないということです。

また、LINQ をそのまま使用できるようにしたいので、セットアップ スクリプトに最後の行を追加しました。ただし、通常のインポートは正常に機能しますが、拡張機能のインポートは機能しません。私が理解できることから、通常のインポートはスクリプト スコープの一部になるため、同じスコープで実行される後続のスクリプトで使用できます。ただし、拡張インポートの動作は異なるようです。

私の質問は、拡張メソッドを明示的にインポートすることなく、実行するスクリプトで LINQ を使用するにはどうすればよいですか?

注: 多くのスクリプトがあり、その多くには 1 つの式しか含まれていません。したがって、各スクリプトに拡張子のインポートを自動的に追加することによるパフォーマンスの低下は避けたいと思います。

4

1 に答える 1

0

Reflector または ILSpy で LINQ ステートメントの IL を調べます。LINQ は、ステートメントを一連のクラスとメソッド呼び出しに変換するコンパイラ マジックです。LINQ を機能させることはできません。あなたの最善の策は、LINQ 関連の作業を行うラッパー クラスです。提供しようとしている実際のユース ケースに焦点を当て、作業を完了するためのヘルパー メソッドを提供します。

于 2015-03-24T14:05:37.550 に答える