Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射相同类型的对象-覆盖布尔_C#_.net_Boolean_Automapper - Fatal编程技术网

C# 自动映射相同类型的对象-覆盖布尔

C# 自动映射相同类型的对象-覆盖布尔,c#,.net,boolean,automapper,C#,.net,Boolean,Automapper,我想使用AutoMapper将两个相同类型的对象合并在一起,如果字段为null或false,则覆盖该字段。例如,假设我有以下模型: public class TestModel { public string A { get; set; } public string B { get; set; } public bool C { get; set; } public bool D { get; set; } } 并设置两个模型: var model1 = ne

我想使用AutoMapper将两个相同类型的对象合并在一起,如果字段为null或false,则覆盖该字段。例如,假设我有以下模型:

public class TestModel
{
    public string A { get; set; }
    public string B { get; set; }
    public bool C { get; set; }
    public bool D { get; set; }
}
并设置两个模型:

var model1 = new TestModel
{
    A = "a",
    B = "b",
    C = true,
    D = false
}

var model1 = new TestModel
{
    A = null,
    B = "b",
    C = false,
    D = true
}
我想合并它们,这样合并后的模型

var mergedModel = new TestModel
{
    A = "a",
    B = "b",
    C = true,
    D = true
}
到目前为止,我有以下映射器配置:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<TestModel, TestModel>()
        .ForAllMembers(options =>
        {
            options.Condition((source, destination, member) => member != null);
        });
});

var mergedModel = Mapper.Map(model1, model2);
Mapper.Initialize(cfg=>
{
cfg.CreateMap()
。对于所有成员(选项=>
{
options.Condition((源、目标、成员)=>member!=null);
});
});
var mergedModel=Mapper.Map(model1,model2);

但是,当然,我最终得到了mergedModel.D=false。我还需要什么条件才能覆盖false的bool?

如果要在映射上实现一些逻辑,最好在每个成员上显式执行

但如果您真的想通过AutoMapper magic来实现,您可以添加以下条件:

options.Condition((source, destination, member) => (member as bool?) != false);

虽然没有回答这个问题,但从代码可读性的角度来看,使用AutoMapper将两个对象映射到相同的目标对象类型,同时应用一些增值业务逻辑并不容易,而静态自定义映射方法
TestModel-DoMyCustomMerge(TestModel,TestModel)
是否更直观?(例如,将业务逻辑隐藏在Automapper中可能会使维护变得棘手?)这是Automapper的一些非常奇怪的用例,我会将逻辑封装在类本身的合并方法或类似方法中