2012-09-27 193 views
2

我該如何去調用泛型方法,只知道運行時的類型,然後調用返回類型的方法?我看了很多例子,但似乎無法得到它的工作。調用泛型方法並調用返回類型的方法

這是我到目前爲止。

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 
} 

感謝您的任何建議。

回答

4

你必須保持與反思工作:

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