Использование Reflection для поиска свойств объекта ArrayList - PullRequest
1 голос
/ 23 июня 2011

У меня есть ArrayList объектов, и я пытаюсь использовать отражение, чтобы получить имя каждого свойства каждого объекта в ArrayList. Например:

private class TestClass
{
    private int m_IntProp;

    private string m_StrProp;
    public string StrProp
    {
        get
        {
            return m_StrProp;
        }

        set
        {
            m_StrProp = value;
        }
    }

    public int IntProp
    {
        get
        {
            return m_IntProp;
        }

        set
        {
            m_IntProp = value;
        }
    }
}

ArrayList al = new ArrayList();
TestClass tc1 = new TestClass();
TestClass tc2 = new TestClass();
tc1.IntProp = 5;
tc1.StrProp = "Test 1";
tc2.IntProp = 10;
tc2.StrPRop = "Test 2";
al.Add(tc1);
al.Add(tc2);

foreach (object obj in al)
{
    // Here is where I need help
    // I need to be able to read the properties
    // StrProp and IntProp. Keep in mind that
    // this ArrayList may not always contain
    // TestClass objects. It can be any object,
    // which is why I think I need to use reflection.
}

Ответы [ 3 ]

7 голосов
/ 23 июня 2011
foreach (object obj in al)
{
    foreach(PropertyInfo prop in obj.GetType().GetProperties(
         BindingFlags.Public | BindingFlags.Instance))
    {
        object value = prop.GetValue(obj, null);
        string name = prop.Name;
        // ^^^^ use those
    }
}
1 голос
/ 23 июня 2011

Вы можете использовать оператор as, чтобы вам не пришлось использовать Reflection.

foreach(object obj in al)
{
     var testClass = obj as TestClass;
     if (testClass != null)
     {
        //Do stuff
     }
}
0 голосов
/ 23 июня 2011

Это так просто:

PropertyInfo[] props = obj.GetType().GetProperties();

Метод GetType вернет фактический тип, а не object. Каждый из PropertyInfo объектов будет иметь свойство Name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...