假设我有一个TestClass
到TestClassModel
的映射。
在没有声明任何其他映射的情况下,我已经可以将Dictionary<string,TestClass>
映射到Dictionary<string,TestClassModel>
。
想象一下Dictionary<string,TestClass>
已使用new Dictionary<string,TestClass>(StringComparer.OrdinalIgnoreCase)
进行了初始化。这允许不区分大小写的查找。
如何在映射的Dictionary中保留StringComparer.OrdinalIgnoreCase构造函数参数?我尝试使用.ForCtorParam
进行显式的Dictionary-> Dictionary映射,但这只会导致目标字典为空(因为您随后必须添加KeyValuePair映射。)
答案 0 :(得分:1)
我确实可以使用它,但是不确定为什么它在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。