タイプを実行時にしか推論できない場合に、リフレクションを使用して次のメソッドを実行する方法を教えてください。日常的な使用でアクションをパラメータとして取るジェネリックメソッドをアクティブにする方法
MainObject.TheMethod<T>(Action<OtherObject<T>>)
、通常:だから
mainObject.Method<Message>(m => m.Do("Something"))
、タイプのリストを考えると、私は上記の方法でTのためにそれらを代用して起動する必要があります。
私はパテになってまで私の頭の前だ場所です:明確にするために、私はタイプのリストを持っていると私はそれぞれにOtherObjectの同じ既知の方法を実行したい:
var mapped = typeof(Action<OtherObject<>>).MakeGenericType(t.GetType());
Activator.CreateInstance(mapped, new object[] { erm do something?});
typeof(OtherObject)
.GetMethod("TheMethod")
.MakeGenericMethod(t.GetType())
.Invoke(model, new object[] { new mapped(m => m.Do("Something")) });
更新。擬似コード:
foreach(var t in types)
{
mainObject.TheMethod<t>(mo => mo.Do("Something"))
}
、
FluentNHibernate.Automapping.AutoPersistenceModel Override<T>(System.Action<AutoMapping<T>> populateMap)
アクションすぐAutoMapping<T>.Where("something")
model.Override<Message>(m => m.Where("DeletedById is null"))
の同じである(TheMethodのパラメータのタイプは、()上述のようAction<OtherObject<T>>
です)
は、アクションのボディは 'すなわち、常に' m.Do( "何か")、常に同じですか? –
はい、上にいくつかの説明が追加されました –
私の答えはあなたを助けませんか? –