我的舊應用程序(1.1天)內工作,也有像許多非泛型集合:從泛型集合到非泛型集合
[Serializable]
public class MyEntityList : CollectionBase
{
private int _virtualRecordCount;
public int VirtualRecordCount
{
get { return _virtualRecordCount; }
set { _virtualRecordCount = value; }
}
public MyEntityList()
{
}
public MyEntityList(MyEntity[] arr)
{
AddRange(arr);
}
public MyEntityList this[int index]
{
get { return (MyEntity)InnerList[index]; }
}
public void Add(MyEntity item)
{
InnerList.Add(item);
}
etc...
我已經升級了應用層使用返回類型的通用Collection<T>
。這一層是自動生成的,類名是基於數據源表名。商業實體類別不需要排隊,但在這種情況下並非如此。在這種情況下,它們完全匹配1:1。
我試圖映射集合,像這樣:
Collection<MyEntityResponse> responses = GetMyEntityResponses();
AutoMapper.Mapper.CreateMap<MyEntityResponse, MyEntity>();
myEntityList = AutoMapper.Mapper.Map<MyEntityList>(responses);
最奇怪的...我想,這可能在使用CollectionBase
發牢騷,但我打了F5反正。令我驚奇的是,沒有編譯器錯誤,也沒有例外。哇噢!
然而,在後來的應用它引發了異常抱怨從MyEntityResponse
類型轉換到MyEntity
時嘗試執行上MyEntityList
一個foreach()
一個從Mapper.Map返回。
發生了什麼事是一個新的MyEntityList
收集被返回,但它填充了MyEntityResponse
對象。咦?自定義集合覆蓋Add()
方法並指定該類型必須爲MyEntity
。我希望在嘗試向集合中添加錯誤類型時會爆炸,但它似乎沒有任何與CollectionBase
一起使用的問題。
所以我的問題是,如果我試圖映射的兩種類型匹配完美(屬性屬性),並且AutoMapper沒有CollectionBase的問題,爲什麼它不能映射內容?爲什麼它沒有拋出異常而不是將錯誤的類型推入集合中?
編輯:我想我知道爲什麼...因爲非泛型集合沒有與它相關的已知類型,就像泛型一樣。
因此,新的問題......我該如何告訴它使用MyEntity
而不是MyEntityResponse
?