简体   繁体   English

C#反射和获取属性

[英]C# Reflection and Getting Properties

I have the following dummy class structure and I am trying to find out how to get the properties from each instance of the class People in PeopleList. 我有以下虚拟类结构,我试图找出如何从PeopleList中的类People的每个实例获取属性。 I know how to get the properties from a single instance of People but can't for the life of me figure out how to get it from PeopleList. 我知道如何从People的单个实例中获取属性,但在我的生活中不能知道如何从PeopleList获取它。 I am sure this is really straightforward but can someone point me in the right direction? 我确信这很简单,但有人能指出我正确的方向吗?

public class Example
{
    public class People
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        public People()
        {

        }

        public People(string name, int age)
        {
            this._name = name;
            this._age = age;
        }
    }

    public class PeopleList : List<People>
    {
        public static void DoStuff()
        {
             PeopleList newList = new PeopleList();

            // Do some stuff

             newList.Add(new People("Tim", 35));
        }
    }        
}

Still not 100% sure of what you want, but this quick bit of code (untested) might get you on the right track (or at least help clarify what you want). 仍然没有100%确定你想要什么,但这个快速的代码(未经测试)可能会让你走上正轨(或至少帮助澄清你想要的东西)。

void ReportValue(String propName, Object propValue);

void ReadList<T>(List<T> list)
{
  var props = typeof(T).GetProperties();
  foreach(T item in list)
  {
    foreach(var prop in props)
    {
      ReportValue(prop.Name, prop.GetValue(item));
    }
  }
}

c# should be able to work out that 'PeopleList' inherits from 'List' and handle that fine, but if you need to have 'PeopleList' as the generic type, then this should work: c#应该能够解决'PeopleList'从'List'继承并处理那么好,但如果你需要'PeopleList'作为泛型类型,那么这应该工作:

void ReadList<T>(T list) where T : System.Collections.IList
{
  foreach (Object item in list)
  {
    var props = item.GetType().GetProperties();
    foreach (var prop in props)
    {
      ReportValue(prop.Name, prop.GetValue(item, null));
    }
  }
}

Note that this will actually process properties in derived types within the list as well. 请注意,这实际上也会处理列表中派生类型的属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM