如何在对象的实例中获取类型的所有值/成员

时间:2014-03-07 00:04:34

标签: c# reflection

这看起来应该很简单,但我遗漏了一些东西。

我有一个这样的课程:

class DataObject
{
   public MyEnum Member1 {get; set;}
   public MyEnum Member2 {get; set;}
   public MyEnum Member3 {get; set;}
   public MyEnum Member4 {get; set;}
   public MyEnum Member5 {get; set;}
   public char Member6 {get; set;}
}

另一个包含此类实例的类。从该对象,我想获得该实例中所有MyEnum成员值的列表(即List<MyEnum>),这样我就可以检查所有这些值,而无需再次键入每个名称。

GetProperties只返回所有属性(我想我可以使用typeof进行Where查询)。

完成此任务的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以获得以下属性:

var properties = typeof (DataObject)
               .GetProperties(BindingFlags.Instance | BindingFlags.Public)
               .Where(x => x.PropertyType == typeof (MyEnum));

然后,您可以为每个GetValue实例调用DataObject方法并填充List<MyEnum>

例如,如果您有List<DataObject>,则可以像这样填充List<MyEnum>

var objectList = new List<DataObject>();
var enumValues = new List<MyEnum>();
foreach (var obj in objectList)
{
     foreach (var prop in properties)
     {
        enumValues.Add((MyEnum)prop.GetValue(obj));
     }
}

您没有提供其他课程,但如果DataObject是其他课程的属性,那么您可以使用DataObjects获取所有LINQ,如下所示:

var objectList = otherList.Select(x => x.DataObject).ToList();