C# 从泛型集合到非泛型集合

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

我在一个较旧的应用程序中工作(从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...
我已经升级了应用程序的一个层,使用一个通用的
集合
作为返回类型。该层是自动生成的,类名基于数据源表名。业务实体类也不必排队,但在本例中并非如此。在这种情况下,它们完全匹配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版起,不支持自定义目标集合类型 支持。