这看起来应该很简单,但我遗漏了一些东西。
我有一个这样的课程:
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查询)。
完成此任务的正确方法是什么?
答案 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();