【问题标题】:How to get all values/members of a type in a instance of an object如何在对象实例中获取类型的所有值/成员
【发布时间】:2014-03-07 08:22:34
【问题描述】:

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

我有这样的课:

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 查询)。

实现此目的的正确方法是什么?

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

    你可以像这样得到你的属性:

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

    然后您可以为每个DataObject 实例调用GetValue 方法并填充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 是另一个类的属性,那么您可以像这样获取所有 DataObjectsLINQ

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

    【讨论】:

    • 完美运行!感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2017-06-15
    • 2013-11-10
    • 2014-01-26
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多