复制与参考

kin*_*ngo 0 c#

为什么这段代码会导致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;
}
Run Code Online (Sandbox Code Playgroud)

[编辑]当我将combinedShipment.Items设置为相同时,我该怎么做以避免出货.物品设置为新列表?

Jon*_*eet 5

这个说法:

var combinedShipment = shipment;
Run Code Online (Sandbox Code Playgroud)

拷贝的价值shipmentcombinedShipment.假设InboundShipment是一个类,值shipment是一个引用 - 而不是一个对象本身.

所以现在我们有两个变量都指向同一个对象.使用哪个变量来对对象进行更改无关紧要 - 通过两个变量可以看到更改.

如果要创建原始对象的新"副本",则必须明确地执行此操作.很难确切地知道你需要做什么,因为你没有给我们提供有关InboundShipment类型的更多信息.

有关更多详细信息,请参阅有关值类型和引用类型的文章.请注意,这是C#和.NET 的重要组成部分,在进一步研究之前,您应该对此充满信心 - 在您获得了一个高级主题(例如LINQ(带有lambda表达式,延迟执行等)之后)很难理解掌握基础知识.