将序列映射到数组时,Automapper 返回对同一对象的引用

2023-12-02

我有一个扩展方法IEnumerable<T>,它映射序列项并返回克隆数组:

public static class AutoMapperExtensions
{
    public static T[] MapToArray<T>(this IEnumerable<T> sequence)
    {
        return Mapper.Map<T[]>(sequence);
    }
}

这是代码示例,从我的角度来看,其行为很奇怪:

        Mapper.CreateMap<SomeClass, SomeClass>();
        Mapper.AssertConfigurationIsValid();

        // clone list members and store them into array
        var list = new List<SomeClass>
        {
            new SomeClass { MyProperty = 1 },
            new SomeClass { MyProperty = 2 },
        };

        // works fine
        var array = list.MapToArray();

        // let's map array again
        var newArray = array.MapToArray();

        // ...and ensure, that new array was created;
        // this fails, because Automapper returns reference to the same array
        Debug.Assert(array != newArray); 

在我看来,最后的结果是错误的。当我期待时,该映射器将创建新的克隆数组,它只是返回对同一数组的引用。

这是否在其他地方记录或这是一个错误?


所以这不是一个错误 - 当 AutoMapper 看到两个可分配的对象时,它只会分配它们。如果要覆盖该行为,请在两种集合类型之间创建映射。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将序列映射到数组时,Automapper 返回对同一对象的引用 的相关文章

随机推荐