gpt4 book ai didi

c# - 从通用集合到非通用集合

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:27 24 4
gpt4 key购买 nike

我在一个较旧的应用程序中工作(从 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当它试图执行 foreach() 时在 MyEntityList这是从 Mapper.Map 返回的。

发生的是一个新的MyEntityList收藏已退回,但里面装满了 MyEntityResponse对象。啊??自定义集合覆盖 Add()方法并指定类型必须是 MyEntity 类型.我希望它在尝试向集合中添加错误类型时会爆炸,但它似乎没有任何问题与 CollectionBase 一起工作。 .

所以我的问题是,如果我尝试映射的两种类型完全匹配(属性到属性),并且 AutoMapper 对 CollectionBase 没有问题,为什么它不能映射实体?为什么它不抛出异常,而是将错误的类型插入集合?


编辑:我想我知道为什么......因为非通用集合没有与之关联的已知类型,就像通用集合一样。

那么,新问题...我如何告诉它使用 MyEntity而不是 MyEntityResponse

最佳答案

我想我找到了答案:http://automapper.codeplex.com/wikipage?title=Lists%20and%20Arrays

For the non-generic enumerable types, only unmapped, assignable types are supported, as AutoMapper will be unable to "guess" what types you're trying to map. As shown in the example above, it's not necessary to explicitly configure list types, only their member types.

As of release 0.2.0, no custom destination collection types are supported.

关于c# - 从通用集合到非通用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com