通过自动映射器将枚举的属性映射到数组

时间:2019-12-03 08:19:27

标签: c# automapper

Given是具有索引属性的类

    public class Foo
    {
        public int Bar1 { get; set; } = 17;
        public int Bar2 { get; set; } = 42;
        public int Bar3 { get; set; } = 99;
        ... 
                   Bar<n>
    }

结果是

int列表包含17,42,99 ...

如何配置可以使用Automapper的映射器

List<int> bars = mapper.Map<List<int>>(foo); 

2 个答案:

答案 0 :(得分:3)

您可以使用Reflection

List<int> bars = new List<int>(foo.GetType()
                                  .GetProperties()
                                  .Where(x => x.PropertyType == typeof(int))
                                  .Select(x => (int)x.GetValue(foo)));

或者如果您还需要属性名称以某种方式对它们进行排序或过滤

 Dictionary<string, int> bars = foo.GetType()
                                   .GetProperties()
                                   .Where(x => x.PropertyType == typeof(int))
                                   .ToDictionary(x => x.Name,  x => (int)x.GetValue(foo));

答案 1 :(得分:1)

我同意Innat3的观点,但他的回答遗漏了几点。在这里:

        var bars = foo.GetType()
            .GetProperties(BindingFlags.Public | BindingFlags.Instance)
            .Where(x => x.PropertyType == typeof(int))
            .Where(x => x.Name.StartsWith("Bar"))
            .Select(x => (int)x.GetValue(foo))
            .ToList();

当然,它不涉及Automapper以及索引属性。我不依赖它们,因为我不知道您是如何实现这些的。