式ツリーを使用して、実行時にデリゲートを構築します。
Type type = GetType();
ParameterExpression parameterType = Expression.Parameter(type);
...
Delegate delegate = Expression.Lambda(*something*, parameterType).Compile();
メソッド GetType() によって返される型がコンパイル時にわかりません。高価な DynamicInvoke() メソッドを使用せずにデリゲートを呼び出すことは可能ですか?
編集 :
私のアプリケーションには、基本抽象クラスがあります。
public abstract class Frame
{
public string RawContent { get; set; }
// ...
}
実行時に、アプリケーションは Frame を継承するいくつかのオブジェクトを使用します。これらのオブジェクトは MEF (プラグイン) と共に読み込まれるため、コンパイル時にはこれらのオブジェクトの型はわかりません。アプリケーションの目的は、エラーのあるデータを含むオブジェクトをフィルタリングすることです。たとえば、プログラムが次のようなクラスのオブジェクトを処理する必要がある場合:
public class Frame01 : Frame
{
public int Counter6hours { get; set; }
public int DeltaCounter6hours { get; set; }
}
ユーザーがアプリケーションの構成ファイルに次のように記述できるようにしたいと思います。
<filtersSection>
<filters>
<filter class="Frame01" expression="Counter6hours < 0" />
<filter class="Frame01" expression="DeltaCounter6hours > 2500" />
</filters>
<filtersSection>
なんとか式ツリーを作成し、それを各フィルターのデリゲートにコンパイルしました。しかし、コンパイル時に Frame01 の型がわからないため、それを Func にキャストすることはできません。基礎となるメソッド。アプリケーションは大量のオブジェクトを処理する必要があり、パフォーマンスの問題が心配です... したがって、この例では、プログラムで Func オブジェクトを構築しようとしていますが、それが可能かどうかはわかりません。
PS : 下手な英語ですみません...