gpt4 book ai didi

c# - 有时我可以让 AutoMapper 返回相同的对象吗?

转载 作者:行者123 更新时间:2023-12-01 21:28:39 26 4
gpt4 key购买 nike

我一直在使用 AutoMapper 在接口(interface)和该接口(interface)的具体实现之间进行映射。我假设如果我传入 AutoMapper 的类型 Map<TDestination>方法与返回类型相同,那么将返回原始对象(作为一种短路操作)。我的假设是错误的:事实上,在查看之后我注意到该方法的文档明确指出:

Execute a mapping from the source object to a new destination object. The source type is inferred from the source object. (bold emphasis mine)

我打开了这个快速控制台应用程序只是为了验证:

using System;
using AutoMapper;

namespace ConsoleApplication
{
class Program
{
interface IFoo
{
string Bar { get; }
}

class Foo : IFoo
{
public string Bar { get; set; }
}

static void Main(string[] args)
{
Mapper.CreateMap<IFoo, Foo>();
IFoo a = new Foo { Bar = "baz" };
Foo b = Mapper.Map<Foo>(a);
Console.WriteLine(Object.ReferenceEquals(a, b)); // false
}
}
}
现在我知道了这种行为,我可以针对我的特定用例对其进行优化,但我想知道是否有另一种使用 AutoMapper 的方法,它会以上述方式“短路”(即.如果类型与我想要的目标类型相同,请返回原始对象)?

最佳答案

您可以使用Mapper.Map<TSource,TDestination>(source, destination)过载。

 Foo b = new Foo();
Mapper.Map<IFoo,Foo>(a,b);

AutoMapper 将使用 b 而不会构建新对象。总的来说,您可以使用 Mapper.Map 的包装器,这种替代方法可能更好(未经测试):

public class MyMapper
{

public static TDestination Map<TDestination>(object source) where TDestination : class
{
if(source is TDestination)
{
return (TDestination) source; //short-circuit here
}

return Mapper.Map<TDestination>(source);
}


public static TDestination Map<TSource, TDestination>(TSource source, TDestination destination)
{
return Mapper.Map<TSource, TDestination>(source, destination);
}
}

关于c# - 有时我可以让 AutoMapper 返回相同的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29704248/

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