0

このコードの結果、shipment.Items.Count と combinedShipment.Items.Count の両方がゼロになるのはなぜですか?

private static InboundShipment CombineLikeIsbns(InboundShipment shipment)
{
    // shipment.Items has a count of 3

    var distinctIsbns = shipment.Items.Select(i => i.ISBN).Distinct().ToList();

    var combinedShipment = shipment;
    combinedShipment.Items = new List<InboundShipmentItem>();

    // Now both combinedShipment and shipment have an empty List in the .Items property

    ...

    return combinedShipment;
}

[編集] そして、combinedShipment.Items を同じに設定したときに、shipment.Items が新しいリストに設定されないようにするにはどうすればよいですか?

4

3 に答える 3

1

この割り当てvar combinedShipment = shipment;により、combinedShipmentとの両方shipmentがまったく同じオブジェクトを参照します。これは、同じ段ボール箱に 2 つの異なるラベルを貼り付けるようなものです。

したがって、ラベルの付いたボックスからすべてのアイテムを取り出す次の行でcombinedShipmentも、ラベルの付いたボックスshipmentが空になります。2 つの異なるラベルが付いた同じボックスにすぎないためです。

異なるアイテムを含む新しい発送オブジェクトを作成したい場合は、まさにそれを行うことから始める必要があります: 新しい発送オブジェクトを作成します。

var combinedShipment = new InboundShipment();

実際のコードは、そのように見えない場合があります。のプロパティの一部をcombinedShipmentのプロパティと同じにしたいshipment場合は、手動でそれを確認する必要があります。の設計方法に応じてInboundShipment、目的の値をコンストラクターに渡すか、プロパティを介して目的の値を設定するか、または両方を組み合わせる必要があります。

于 2012-08-22T16:10:17.050 に答える