gpt4 book ai didi

c# - 如何使用 AutoMapper 将构造函数参数传递给隐式字典映射?

转载 作者:行者123 更新时间:2023-11-30 17:27:49 24 4
gpt4 key购买 nike

假设我有一个 TestClassTestClassModel映射。

没有声明任何其他映射,我已经可以映射 Dictionary<string,TestClass>Dictionary<string,TestClassModel> .

想象一下 Dictionary<string,TestClass>已使用 new Dictionary<string,TestClass>(StringComparer.OrdinalIgnoreCase) 初始化.这允许不区分大小写的查找。

如何在映射的字典中保留 StringComparer.OrdinalIgnoreCase 构造函数参数?我已经尝试使用 .ForCtorParam 进行显式 Dictionary->Dictionary 映射,但这只会导致目标字典为空(因为您随后必须添加 KeyValuePair 映射。)

fiddle :https://dotnetfiddle.net/KYQNWT

最佳答案

我确实让它工作了,但不确定为什么它不能在 DotNetFiddle 上工作。如果我在自己的应用程序中运行它,它就可以正常工作。我留下了我测试过的其他东西。

  Mapper.Initialize(cfg =>
{
cfg.CreateMap<TestClass, TestClassModel>()
.ForMember(d => d._F1, s => s.MapFrom(o => o.F1));

cfg.CreateMap<KeyValuePair<string, TestClass>, KeyValuePair<string, TestClassModel>>()
.ConstructUsing(x => new KeyValuePair<string, TestClassModel>(x.Key, Mapper.Map<TestClassModel>(x.Value)));

cfg.CreateMap(typeof(Dictionary<,>), typeof(Dictionary<string, TestClassModel>))
//.ForCtorParam("collection", opt => opt.MapFrom(src => Mapper.Map<IEnumerable<KeyValuePair<string, TestClassModel>>>(src)))
//.ForCtorParam("comparer", opt => opt.MapFrom(src => StringComparer.OrdinalIgnoreCase));
.ConstructUsing(src => new Dictionary<string, TestClassModel>(Mapper.Map<IEnumerable<KeyValuePair<string, TestClassModel>>>(src), StringComparer.OrdinalIgnoreCase));
});

如果您要在任何类型的真实环境中运行它,我强烈建议您使用 instanced type of automapper .

关于c# - 如何使用 AutoMapper 将构造函数参数传递给隐式字典映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336673/

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