C# 如何使用值注入器映射枚举

C# 如何使用值注入器映射枚举,c#,enums,valueinjecter,C#,Enums,Valueinjecter,我正试图得到我的手在过去使用过Automapper。我想将一个枚举转换为另一个枚举,其中只有枚举名称不同,但属性名称和值相同 public enum GenderModel { NotSpecified = 0, Male = 1, Female = 2 } public enum GenderDto { NotSpecified = 0, Male = 1, Female

我正试图得到我的手在过去使用过Automapper。我想将一个枚举转换为另一个枚举,其中只有枚举名称不同,但属性名称和值相同

 public enum GenderModel
    {
        NotSpecified = 0,
        Male = 1,
        Female = 2
    }

public enum GenderDto
    {
        NotSpecified = 0,
        Male = 1,
        Female = 2
    }
然后我试着像这样绘制地图

var model = GenderModel.Male;
            var dto = GenderDto.NotSpecified;
            dto.InjectFrom(model);
我希望在dto对象中获得男性,但它仍然设置为NotSpecified


我错过了什么?请指导。

在我看来,
valueinjector
无法映射值类型,例如
enum、struct、int、double
。或者不需要映射值类型。它只帮助映射具有相同名称和类型的类类型的属性。为了映射本例中的枚举,我建议

    var model = GenderModel.Male;
    var dto = GenderDto.NotSpecified;
    dto = (GenderDto)model;
如果枚举嵌套在特定类中,则默认ValueInjector无法映射
GenderModel
GenderTo
,因为它们的类型不同。所以我们可以通过客户价值注入者来实现它。这是我在这里的测试代码,希望能对大家有所帮助

public enum GenderModel
{
    NotSpecified = 0,
    Male = 1,
    Female = 2
}

public enum GenderDto
{
    NotSpecified = 0,
    Male = 1,
    Female = 2
}

public class Person1
{
    public GenderModel Gender { get; set; }
}

public class Person2
{
    public GenderDto Gender { get; set; }
}

public class EnumMapInjection:IValueInjection
{
    public object Map(object source, object target)
    {
        StaticValueInjecter.DefaultInjection.Map(source, target);
        if (target is Person2 && source is Person1)
        {
            ((Person2) target).Gender = (GenderDto)((Person1) source).Gender;
        }
        return target;
    }
}
以及主要功能代码:

    static void Main(string[] args)
    {
        var person1 = new Person1(){Gender = GenderModel.Male};
        var person2 = new Person2(){Gender = GenderDto.Female};
        person2.InjectFrom<EnumMapInjection>(person1); 
    }
static void Main(字符串[]args)
{
var person1=newperson1(){Gender=GenderModel.Male};
var person2=newperson2(){Gender=GenderDto.Female};
第二人:注射源(第一人);
}

在我看来,
valueinjector
无法映射值类型,例如
enum、struct、int、double
。或者不需要映射值类型。它只帮助映射具有相同名称和类型的类类型的属性。为了映射本例中的枚举,我建议

    var model = GenderModel.Male;
    var dto = GenderDto.NotSpecified;
    dto = (GenderDto)model;
如果枚举嵌套在特定类中,则默认ValueInjector无法映射
GenderModel
GenderTo
,因为它们的类型不同。所以我们可以通过客户价值注入者来实现它。这是我在这里的测试代码,希望能对大家有所帮助

public enum GenderModel
{
    NotSpecified = 0,
    Male = 1,
    Female = 2
}

public enum GenderDto
{
    NotSpecified = 0,
    Male = 1,
    Female = 2
}

public class Person1
{
    public GenderModel Gender { get; set; }
}

public class Person2
{
    public GenderDto Gender { get; set; }
}

public class EnumMapInjection:IValueInjection
{
    public object Map(object source, object target)
    {
        StaticValueInjecter.DefaultInjection.Map(source, target);
        if (target is Person2 && source is Person1)
        {
            ((Person2) target).Gender = (GenderDto)((Person1) source).Gender;
        }
        return target;
    }
}
以及主要功能代码:

    static void Main(string[] args)
    {
        var person1 = new Person1(){Gender = GenderModel.Male};
        var person2 = new Person2(){Gender = GenderDto.Female};
        person2.InjectFrom<EnumMapInjection>(person1); 
    }
static void Main(字符串[]args)
{
var person1=newperson1(){Gender=GenderModel.Male};
var person2=newperson2(){Gender=GenderDto.Female};
第二人:注射源(第一人);
}

类型转换是您的解决方案

dto = (GenderDto)model;

类型转换是您的解决方案

dto = (GenderDto)model;

是的,但是想象一下,如果这个枚举嵌套在Person类中,我得到一个Person列表,并希望将它们映射到DTO列表。除非我可以使用ValueInjector定义映射,否则我需要迭代列表并手动映射枚举。我可以在我的答案中给你一个例子。是的,但是想象一下,如果这个枚举嵌套在一个Person类中,我得到一个Person列表,并希望将它们映射到一个DTO列表。除非我可以使用ValueInjector定义映射,否则我需要迭代列表并手动映射枚举。我可以在回答中给你举个例子。