Дублирование объекта в списке <T> - PullRequest
1 голос
/ 09 января 2012

Время для моего первого вопроса!Я хочу сообщить, что я довольно любитель программирования, и я, вероятно, не совсем понимаю термины, которые собираюсь использовать.

Я делаю программу, которая берет результаты изOracle Query и отображает их в DataGridView для манипулирования.Данные будут использоваться с программным обеспечением для наложения, и мне нужно иметь возможность «разбивать» и «соединять» строки для создания дубликатов.

Данные поступают с моего сервисного уровня в виде общей коллекции под названием CheckOrderLine, которая содержитБолее 20 объектов, содержащих все извлеченные данные.

Я ищу способ взять текущий CheckOrderLine из моего источника привязки _bs и создать новый CheckOrderLine со всеми одинаковыми значениями.Я считаю, что это называется глубокой копией.

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

    CheckOrderLine current = (CheckOrderLine)_bs.Current;
    CheckOrderLine cloned = new CheckOrderLine();

    cloned.OrderNumber = current.OrderNumber;
    cloned.Qty = current.Qty;

и т. Д.

Итак, я предполагаю, что мой вопрос таков: Есть ли способ перебрать CheckOrderLine и установить значения для каждого свойства в моем новом объекте?Кроме того, есть что-то ужасно не так с направлением, которым я возглавляю?Я видел, как в Интернете говорят об использовании ICloneable в моем классе CheckOrderLine, но сейчас у меня над головой.

РЕДАКТИРОВАТЬ: Неправильный тег VS.И я исправил словарный запас.

1 Ответ

2 голосов
/ 10 января 2012

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

Профессиональные разработчики обычно (надеюсь) стараются разрабатывать код «элегантным» способом. Элегантность в этом случае, вероятно, означает включение логики для клонирования CheckOrderLine внутри класса CheckOrderLine (в качестве метода). Таким образом, если вы найдете другое место в вашем приложении, где вам нужно клонировать эти вещи, вы можете вызвать ту же функцию, и любые исправления ошибок в этой функции улучшат оба места, где вы копируете класс. Вам не нужно реализовывать интерфейс ICloneable, чтобы сделать это - это в основном просто соглашение.

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

...