Установка поля для объекта, который является свойством в классе, используя отражение в .NET - PullRequest
0 голосов
/ 02 декабря 2010

У меня следующая структура класса (псевдокод):

Class A
{
  Property string Who;
  Property string Where;
}

Class B
{
  Property A Information;
}

Class C
{
   Property String Who;
}

Я пытаюсь выяснить, как установить набор B.A.Who = C.Who с помощью отражения в .NET 4.0.

Спасибо!

1 Ответ

3 голосов
/ 24 января 2011

Что ж, это не так уж сложно сделать вроде правильно, но было бы очень грязно, если бы вы хотели проверку аргументов, изящную обработку ошибок и т. Д. Вот пример, который должен выделитьтехника (без проверок):

static void SetBsAsWhoToCsWho(object b, object c)
{
    // csWho = c.Who
    object csWho = c.GetType().GetProperty("Who").GetValue(c, null);

    // a = b.Information
    object a = b.GetType().GetProperty("Information").GetValue(b, null);

    // a.Who = csWho
    a.GetType().GetProperty("Who").SetValue(a, csWho, null);
}

Вам нужны все виды проверок в приведенном выше коде, чтобы сделать его надежным.Было бы очень полезно, если бы вы сказали нам , почему вы хотите использовать рефлексию для выполнения этой задачи.В зависимости от сценария могут быть более подходящие решения, такие как:

  1. Очевидный типобезопасный код.
  2. Приведение в случае необходимости, за которым следует код, сохраняющий тип.
  3. Генерация делегата путем построения и компиляции дерева выражений.
  4. Использование dynamic.
  5. AutoMapper и других библиотек.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...