调用泛型方法并在返回类型上调用方法

时间:2012-09-27 23:21:05

标签: c#

如何在运行时只知道类型并调用返回类型的方法时,如何调用泛型方法?我看了很多例子,但似乎无法让它发挥作用。

这是我到目前为止所做的。

public interface IDataMapper<TEntity> where TEntity : IEntity
{
    void Update(TEntity entity);
}

public IDataMapper<TEntity> GetMapper<TEntity>() where TEntity : IEntity
{
    // Return something of type IDataMapper<TEntity>
}

foreach (IEntity entity in _dirtyObjects)
{
    MethodInfo method = typeof(MapperFactory).GetMethod("GetMapper");
    MethodInfo generic = method.MakeGenericMethod(entity.GetType());

    generic.Invoke(_mapperFactory, null);
    // I now want to call the Update() method
    // I have tried to cast to IDataMapper<IEntity> which results in a null ref ex
}

感谢您的任何建议。

1 个答案:

答案 0 :(得分:4)

你必须继续使用反射:

object dataMapper = generic.Invoke(_mapperFactory, null);
method = dataMapper.GetType().GetMethod("Update");
method.Invoke(dataMapper, new object[] {entity});