我有两个枚举。一个比另一个具有更多的价值。我想在删除缺失值的同时将一个映射到另一个。
public enum Person1ColoursEnum
{
BlueColour = 1
RedColour = 2
}
public enum Person2ColoursEnum
{
Blue = 1
Red = 2
Green = 3
Yellow = 4
Pink = 5
}
var person2Colours = new[] {
Person2ColoursEnum.Blue,
Person2ColoursEnum.Red,
Person2ColoursEnum.Yellow
}
var favColours = mapper.Map<Person1ColoursEnum[]>(person2Colours);
我希望结果是 [BlueColour, RedColour]
CreateMap<Person2ColoursEnum, Person1ColoursEnum>()
.ConvertUsingEnumMapping(opt => opt
.MapValue(Person2ColoursEnum.Blue, Person1ColoursEnum.BlueColour )
.MapValue(Person2ColoursEnum.Red, Person1ColoursEnum.RedColour )
.MapValue(Person2ColoursEnum.Green, default)
.MapValue(Person2ColoursEnum.Yellow, default)
.MapValue(Person2ColoursEnum.Pink, default)
);
我能得到的最接近的是上面的结果:[BlueColour, RedColour, 0, 0, 0]
您可以使用 LINQ 过滤值,然后转换它们。这是一种方法:
Person1ColoursEnum
中存在的值。Person2ColoursEnum
转换为 Person1ColoursEnum
.var person2Colours = new[] {
Person2ColoursEnum.Blue,
Person2ColoursEnum.Red,
Person2ColoursEnum.Yellow
};
var favColours = person2Colours
.Where(p2c => Enum.IsDefined(typeof(Person1ColoursEnum), (int)p2c))
.Select(p2c => (Person1ColoursEnum)(int)p2c)
.ToArray();
这种方法有以下好处:
也有一些缺点:
int
)。如果他们有不同的基础类型,你需要投
相应地。另一种方法是使用字典将值从一个枚举映射到另一个枚举:
var person2ToPerson1ColourMap = new Dictionary<Person2ColoursEnum, Person1ColoursEnum>
{
{ Person2ColoursEnum.Blue, Person1ColoursEnum.BlueColour },
{ Person2ColoursEnum.Red, Person1ColoursEnum.RedColour }
};
var favColours = person2Colours
.Where(p2c => person2ToPerson1ColourMap.ContainsKey(p2c))
.Select(p2c => person2ToPerson1ColourMap[p2c])
.ToArray();
这种方法有以下好处:
缺点: