我有我使用的幾乎所有的視圖模式,建立實體的索引表中的IndexModel
基類:我如何用動態確定的類型參數調用泛型方法?
public class IndexModel<TIndexItem, TEntity> : ViewModel
where TIndexItem : MappedViewModel<TEntity>, new()
where TEntity : new()
{
public IndexModel()
{
Items = new List<TIndexItem>();
}
public TIndexItem TemplateItem { get; set; }
public List<TIndexItem> Items { get; set; }
public virtual void MapFromEntityList(IEnumerable<TEntity> entityList)
{
Items = Mapper.Map<IEnumerable<TEntity>, List<TIndexItem>>(entityList);
}
}
我覺得TEntity
參數是不必要的,因爲TIndexItem
是MappedViewModel<TEntity>
類型。我的問題是雙重的,然後:
我需要動態調用
MapFromEntityList
,使用反射來確定哪些TEntity
是。構建IEnumerable<TEntity>
參數相當簡單,但調用Mapper.Map<IEnumerable<TEntity>, List<TIndexItem>>(entityList)
是一個挑戰。我如何使用動態構建的類型參數調用map?我的班級有約束條件
where : MappedViewModel<TEntity>, new()
。這不是一個太大的問題,因爲我可以使這個不太具體,例如,where TIndexItem : ViewModel, new()
,其中ViewModel
是我所有視圖模型的「無類型」基類。然後,我只能做TEntity
特定的東西,如地圖調用,如果TIndexItem
是MappedViewModel<TEntity>
。
如此簡單,卻又如此難以捉摸。樹木等。謝謝。 – ProfK 2013-02-12 18:26:57
np,有時候所有你需要的是另一雙眼睛:)尤其是當你一次又一次看過同樣的東西時 – user1416420 2013-02-12 19:21:50
不幸的是我之前沒有嘗試過這種方法,但是它後面會解釋一些缺陷,所以我必須撤回我的接受。儘管你仍然非常接近,但你仍然有一個點。 – ProfK 2013-03-17 09:25:12