gpt4 book ai didi

c# - 如何使用自动映射器有条件地将目标对象设置为 null

转载 作者:行者123 更新时间:2023-11-30 19:59:44 24 4
gpt4 key购买 nike

我正在尝试做这样的事情:

AutoMapper.Mapper.CreateMap<UrlPickerState, Link>()
.ForMember(m=>m.OpenInNewWindow,map=>map.MapFrom(s=>s.NewWindow))
.AfterMap((picker, link) => link = !string.IsNullOrWhiteSpace(link.Url)?link:null) ;

var pickerState = new UrlPickerState();
var linkOutput = AutoMapper.Mapper.Map<Link>(pickerState);

但是,link 的赋值没有在任何执行路径中使用。
我希望 linkOutput 为 null,但它不是。
如何使目标对象为空?

涉及对象的详细信息:

public class Link
{
public string Title { get; set; }
public string Url { get; set; }
public bool OpenInNewWindow { get; set; }
}

public class UrlPickerState
{
public string Title { get; set; }
public string Url { get; set; }
public bool NewWindow { get; set; }
//.... etc
}

这是一个 fiddle :http://dotnetfiddle.net/hy2nIa

最佳答案

这是我最后使用的解决方案,它在内部有点手动,但不需要任何额外的管道。

如果有人有更优雅的解决方案,我们将不胜感激。

config.CreateMap<UrlPickerState, Link>()
.ConvertUsing(arg =>
{
if (string.IsNullOrWhiteSpace(arg.Url))
{
return null;
}
return new Link()
{
Url = arg.Url,
OpenInNewWindow = arg.NewWindow,
Title = arg.Title,
};
});

关于c# - 如何使用自动映射器有条件地将目标对象设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209101/

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