C# 从泛型集合到非泛型集合
我在一个较旧的应用程序中工作(从1.1天开始),有许多非通用集合,如:C# 从泛型集合到非泛型集合,c#,collections,automapper,C#,Collections,Automapper,我在一个较旧的应用程序中工作(从1.1天开始),有许多非通用集合,如: [Serializable] public class MyEntityList : CollectionBase { private int _virtualRecordCount; public int VirtualRecordCount { get { return _virtualRecordCount; } set { _virtualRecordCoun
[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...
我已经升级了应用程序的一个层,使用一个通用的集合
作为返回类型。该层是自动生成的,类名基于数据源表名。业务实体类也不必排队,但在本例中并非如此。在这种情况下,它们完全匹配1:1
我试着像这样映射集合:
Collection<MyEntityResponse> responses = GetMyEntityResponses();
AutoMapper.Mapper.CreateMap<MyEntityResponse, MyEntity>();
myEntityList = AutoMapper.Mapper.Map<MyEntityList>(responses);
Collection responses=GetMyEntityResponses();
AutoMapper.Mapper.CreateMap();
myEntityList=AutoMapper.Mapper.Map(响应);
最奇怪的是。。。我原以为在使用CollectionBase
时它可能会发出嘎嘎声,但我还是按了F5。令我惊讶的是,没有编译器错误,也没有例外。呜呼
但是,后来在应用程序中,当它试图对Mapper.Map返回的MyEntityList
执行foreach()
时,它抛出了一个异常,抱怨类型从MyEntityResponse
转换为MyEntityResponse
发生的情况是,返回了一个新的MyEntityList
集合,但其中填充了MyEntityResponse
对象。呵呵??自定义集合覆盖Add()
方法,并指定类型必须为MyEntity
类型。我希望它在尝试向集合中添加错误的类型时会爆炸,但它在使用CollectionBase
时似乎没有任何问题
所以我的问题是,如果我尝试映射的两种类型完全匹配(属性到属性),并且AutoMapper与CollectionBase没有问题,为什么它不能映射实体?为什么它不抛出一个异常,而不是将错误的类型推入集合
编辑:我想我知道为什么。。。因为非泛型集合没有与之关联的已知类型,就像泛型集合一样
所以,新问题。。。我如何告诉它使用
MyEntity
而不是MyEntityResponse
?我想我找到了答案:
对于非泛型可枚举类型,只有未映射的、可分配的类型
支持,因为AutoMapper将无法“猜测”什么类型
你在试图绘制地图。如上面的例子所示,它不是
需要显式配置列表类型,仅配置其成员类型
自0.2.0版起,不支持自定义目标集合类型
支持。