PropertyInfo GetValue выдает ошибку во время рекурсии - PullRequest
3 голосов
/ 02 февраля 2011

Я получаю «Объект не соответствует типу цели», когда я пытаюсь получить значение объекта во время выполнения в моей программе на C #.

public void GetMyProperties(object obj)
{
  foreach(PropertyInfo pinfo in obj.GetType().GetProperties())
  {
    if(!Helper.IsCustomType(pinfo.PropertyType))
    {
      string s = pinfo.GetValue(obj, null); //throws error during recursion call
      propArray.Add(s);
    }
    else
    {
      object o = pinfo.PropertyType;
      GetMyProperties(o);
    }
  }
}

Я передаю объект моего класса BrokerInfo, у которого есть одно свойство типа Broker, у которого свойства inturn имеют свойства - FirstName и LastName (все строки для простоты).

- BrokerInfo
  - Broker
    - FirstName
    - LastName

Я пытаюсь рекурсивно проверять пользовательские типы и получать их значения. Я могу сделать что-то вроде:

- Broker
  - FirstName
  - LastName

Пожалуйста, помогите.

Обновление: удалось решить с помощью леппи: вот модифицированный код.

public void GetMyProperties(object obj)
{
  foreach(PropertyInfo pinfo in obj.GetType().GetProperties())
  {
    if(!Helper.IsCustomType(pinfo.PropertyType))
    {
      string s = pinfo.GetValue(obj, null); 
      propArray.Add(s);
    }
    else
    {
      object o = pinfo.GetValue(obj, null);
      GetMyProperties(o);
    }
  }
}

IsCustom - мой метод проверки, является ли тип обычным типом или нет. Вот код:

public static bool IsCustomType(Type type)
{
    //Check for premitive, enum and string
    if (!type.IsPrimitive && !type.IsEnum && type != typeof(string))
    {
        return true;
    }
    return false;
}

1 Ответ

5 голосов
/ 02 февраля 2011

Почему вы углубляетесь в тип, а не в экземпляр?

В частности, здесь:

  object o = pinfo.PropertyType;
  GetMyProperties(o);

Это должно выглядеть примерно так:

  var o = pinfo.GetValue(obj, null);
  GetMyProperties(o);
...