Рекурсивно копировать свойства с FastMember - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть два объекта из этого класса:

public class A
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<B> Bs { get; set; }
}

public class B
{
    public string Description { get; set; }
    public IList<C> Cs { get; set; }
}

public class C
{
    public string Description { get; set; }
}

Теперь я хочу просмотреть все свойства двух экземпляров объекта с помощью FastMember и скопировать свойства из object 1 в object 2.

Вот что я получил (не работает!)

// Set accessors
var sourceAccessor = ObjectAccessor.Create(object1);
var targetAccessor = ObjectAccessor.Create(object2);

foreach (var sourceItem in (IList)sourceAccessor.Target)
{
    var targetItemAccessor = ObjectAccessor.Create(targetAccessor.Target);
    var sourceItemAccessor = ObjectAccessor.Create(sourceItem);

    // Overwrite property
    targetItemAccessor[p] = sourceItemAccessor[p];
}

этот код явно не работает ... есть идеи?Спасибо!

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете создать мелкую копию с помощью TypeAccessor, используя что-то вроде:

var sourceAccessor = ObjectAccessor.Create(object1);
var targetAccessor = ObjectAccessor.Create(object2);

var access = TypeAccessor.Create(typeof(A));
var members = access.GetMembers();

foreach (var member in members)
{
    targetAccessor[member.Name] = sourceAccessor[member.Name];
}

Посмотрите на тесты FastMember дляпримеры использования.

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

...