C# 如何获取对象实例中类型的所有值/成员
这看起来应该很简单,但我遗漏了一些东西 我有一门课是这样的:C# 如何获取对象实例中类型的所有值/成员,c#,reflection,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
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;}
}
var properties = typeof (DataObject)
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(x => x.PropertyType == typeof (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));
}
}
var objectList = otherList.Select(x => x.DataObject).ToList();
以及另一个包含该类实例的类。从该对象中,我希望获得该实例中所有MyEnum成员值的列表(即list
),这样我就可以检查所有这些值,而无需再次键入每个名称
GetProperties只返回所有属性(我想我可以用typeof执行Where查询)
实现这一点的正确方法是什么?您可以获得如下属性:
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;}
}
var properties = typeof (DataObject)
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(x => x.PropertyType == typeof (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));
}
}
var objectList = otherList.Select(x => x.DataObject).ToList();
然后,您可以为每个数据对象
实例调用GetValue
方法,并填充列表
例如,如果您有一个列表
,您可以这样填充列表
:
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;}
}
var properties = typeof (DataObject)
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(x => x.PropertyType == typeof (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));
}
}
var objectList = otherList.Select(x => x.DataObject).ToList();
工作得很好!谢谢你的帮助。