Ошибка PropertyInfo.GetValue для пользовательского класса - PullRequest
0 голосов
/ 18 января 2012

У меня есть объект, RenderComponent, который имеет свойство с именем Model типа StaticModel.Когда я получаю PropertyInfo моего RenderComponent и затем вызываю GetValue(), это дает мне TargetException, говоря: «Объект не соответствует типу цели».

Я напишу маленькийОбразец кода, чтобы дать вам суть того, что терпит неудачу.Вот иерархия:

public class RenderComponent
{
    StaticModel Model;
}

public class StaticModel
{

}

И я, по сути, делаю это:

RenderComponent renderComponent = new RenderComponent();
PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

foreach (PropertyInfo info in props)
{
    // I get the exception here
    Object value = info.GetValue(renderComponent, null);
}

Моя программа, конечно, намного сложнее, но я все еще не понимаю, как это может бытьтерпит неудачу.Я, должно быть, упускаю что-то простое.

В этой строке я получаю исключение:

info.GetValue(obj, null)

Где info - это PropertyInfo из StaticModelobj является экземпляром RenderComponent.Когда я останавливаюсь на этом исключении и наблюдаю за obj, я могу фактически пройти по иерархии, пока не доберусь до своего значения StaticModel, и оно существует и содержит данные, которые я ожидаю.

Я уверен, что еслиЯ взял небольшой пример кода, который я разместил в этой теме, он будет работать нормально, так что это должно быть что-то с тем, как я называю его в моем движке, я просто не вижу, как GetValue может завершиться ошибкой, когда obj явно имеет это значение внутриэто.

Вот скриншот моей отладки 'obj' и нахождения StaticModel: enter image description here

И вот ошибка, которую я получаю: enter image description here

И здесь вы можете увидеть значения obj и info, как доказательство того, что мой экземпляр объекта, который я передаю, является RenderComponent, а PropertyInfo я вызываю GetValueon является статической моделью (которая является членом RenderComponent, как вы можете видеть на первом изображении: enter image description here

1 Ответ

0 голосов
/ 19 января 2012

Комментарий sos00 к исходному вопросу был правильным ответом на этот вопрос.Его комментарий был:

Почему у obj (на последнем скриншоте Watch) есть Key & Value?не должен быть RenderComponent?Я думаю, что вы передаете KeyValuePair вместо экземпляра RenderComponent

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