Отображение объекта на растровое изображение - PullRequest
0 голосов
/ 09 сентября 2011

Я пишу простой класс mapper для клонирования и копирования свойств между различными объектами разных / одинаковых типов.

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

Все работает для таких типов, как этот:

class SimpleValueTypes 
{
    public string Name { get; set; }
    public int Number { get; set; }
    public long LongNumber { get; set; }
    public float FloatNumber { get; set; }
    public bool BooleanValue { get; set; }
    public AnotherType AnotherProperty{ get; set; }

}

где AnotherType - это тип класса. Сопоставление ссылочных типов выполняется путем рекурсивной проверки свойств до тех пор, пока все свойства не будут сопоставлены с назначением в значительной степени следующим образом:

object value = mapFrom.GetValue(input, null);                
mapTo.SetValue(output, value, null);

где mapForm и mapTo являются объектами PropertyInfo.

Проблемы начались, когда появился новый тип со свойством «Bitmap», и я понял, что целый класс объектов нельзя обрабатывать одинаково.

Class NewType
{
    public Bitmap Bitmap{get;set;}
    public string Name{get;set;}
}

Что бы вы порекомендовали сделать для подобных случаев? Очевидно, что копирование свойств не приведет к новой копии исходного объекта Bitmap.

PS

Я не могу использовать automapper / emit mapper или любые другие внешние пакеты.

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Если объект является ICLoneable, вы можете использовать его, вы можете легко проверить, если он есть, и положиться на реализацию. Для объекта, который не является ICloneable , этот поток может помочь вам в этом.

Герт-Ян

1 голос
/ 09 сентября 2011

Если вы реализуете маппер и не используете некоторые из существующих:

Я думаю, что это всегда работало на вашей стороне, это всего лишь случай вашего проекта (что является хорошей новостью).Дело в том, что, по моему мнению, вы пришли к тому моменту, когда вам нужно реализовать собственный картограф.Поэтому определите некоторый базовый класс, такой как BaseMapper, с отображением основных функций, и наследуйте от него класс BitmapMapper:BaseMapper, который заботится о отображении объектов типа Bitmap.

Через некоторое время вы можете получить какой-то другой тип, вы создадите MyTypeMapper : BaseMapper с конкретной реализацией отображения.

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

Если использование вашего собственного картографа не является обязательным для вас, вы можете использовать некоторые уже существующие решения, доступные на рынке, как, например, Automapper

С уважением.

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