Существует ли более короткий способ перезаписи свойств исходного объекта-объекта на текущий объект-объект? - PullRequest
1 голос
/ 31 мая 2010

Например, у меня есть:

originalItem.Property1 = currentItem.Property1;
originalItem.Property2 = currentItem.Property2;
originalItem.Property3 = currentItem.Property3;
originalItem.Property4 = currentItem.Property4;

Свойства также изменятся, если значение свойства currentItem отличается от значения свойства originalItem.

Здесь есть какие-нибудь ярлыки? Спасибо.

1 Ответ

1 голос
/ 31 мая 2010

Да, вы можете сделать это через отражение .

Прочитайте свойства обоих экземпляров и присвойте их с помощью отражения.

Вот код ...

    public static void AssignSourceToDestination(Object source, ref Object destination)
    {
        IList<PropertyInfo> sourceProps = source.GetProperties();
        IList<PropertyInfo> destProps = destination.GetProperties();

        foreach (PropertyInfo property in destProps)
        {
            if (property.CanWrite)
            {
                PropertyInfo sourceProp = sourceProps.Where(p => p.Name.Equals(property.Name) &&
                    p.PropertyType.Equals(property.PropertyType) && p.CanRead).First();
                if (null != sourceProp)
                    property.SetValue(destination, sourceProp.GetValue(source, null), null);
            }
        }
    }

    public static IList<PropertyInfo> GetProperties(this Object me)
    {
        return me.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
    }
...