1

私の最初の質問の時間です!私はプログラミングに関してかなりの素人であり、おそらくこれから使用する用語を完全には理解していないことを知らせたいと思います。

Oracle クエリから結果を取得し、操作のために DataGridView に表示するプログラムを作成しています。データは面付けソフトウェアで使用され、行を「分割」および「結合」して複製を作成できる必要があります。

データは、プルされたすべてのデータを含む 20 以上のオブジェクトを含む CheckOrderLine と呼ばれる汎用コレクションとしてサービス レイヤーから取得されます。

バインディング ソース _bs から現在の CheckOrderLine を取得し、すべて同じ値で新しい CheckOrderLine を作成する方法を探しています。これはディープコピーとして知られていると思います。

次のコードを使用して目標を達成できることを学びましたが、それを行うためのより良い方法があると確信しています。

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

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

等々。

だから私の質問はこれだと思います: CheckOrderLine を反復処理して、新しいオブジェクトの各プロパティの値を設定する方法はありますか? また、私が向かっている方向にひどく間違っていることはありますか? Web で CheckOrderLine クラスで ICloneable を使用することについて話しているのを見たことがありますが、現時点ではそれは私の頭の中にあります。

編集:間違った VS タグがありました。そして、いくつかの語彙を修正しました。

4

1 に答える 1

2

最初のプロジェクトおめでとうございます。あなたは正しい道を進んでいます-純粋な「うまくいくか」の観点から、あなたが今やっている方法に何の問題もありません.1つのプロパティを次々とコピーするだけです.

プロの開発者は通常、(願わくば) 「エレガントな」方法でコードを開発しようと努力します。この場合のエレガンスとは、おそらくCheckOrderLine クラスに (メソッドとして) CheckOrderLine を複製するためのロジックを含めることを意味します。このようにして、これらのものを複製する必要があるアプリケーション内の別の場所を見つけた場合、同じ関数を呼び出すことができ、その関数に対するバグ修正により、クラスをコピーする両方の場所が改善されます。それを行うために ICloneable インターフェースを実装する必要はありません。ほとんどの場合、それは単なる規則です。

リフレクションと呼ばれる手法を使用して、プロパティをプログラムで反復処理し、それらを新しいオブジェクトにコピーすることもできますが、おそらく今は頭がいっぱいです。

于 2012-01-09T20:30:07.053 に答える