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);
答案 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以及索引属性。我不依赖它们,因为我不知道您是如何实现这些的。