を経由して、ネストされたクラスから静的フィールドを取得します。私は、これらのクラス持つ式ツリー
今public class Entity
{
public static readonly EntitySchema Schema = new EntitySchema();
}
public abstract class BaseSchema
{
public abstract string Name {get;}
}
public class EntitySchema : BaseSchema
{
public override string Name => "Schema";
}
を、私はエンティティ(静的フィールドにアクセスすることはできません)については何も知らない方法、からEntitySchema.Name
にアクセスしたいです。
私は反射でこれを行うことができます:
直接呼び出しEntity.Schema.Name
反射バージョンに比べ
static BaseSchema GetSchema<T>()
{
var pr = typeof(T).GetField("Schema");
var schema = pr.GetValue(null);
return schema as BaseSchema;
}
しかしが50倍遅くなります。
リフレクションバージョンをエクスプレッションツリーに変換し、コールをあらかじめコンパイルする方法はありますか?
ありがとうございました! var f = MakeDelegate()のコンパイル済みバージョンを実行すると、1250msではなく10mio呼び出しで約44msになりました! –