【问题标题】:Copy an object from a list into another object in the same list将列表中的对象复制到同一列表中的另一个对象中
【发布时间】:2017-04-10 12:30:08
【问题描述】:

我已将对象列表定义为List<NewLayerCounterMethod> NewLayer = new List<NewLayerCounterMethod>();,其中NewLayerCounterMethod 类中的每个对象都有四个属性,例如:VehicleType, VehicleCounter,Counter,Updating

NewLayer 的对象数量为 10,我想将 NewLayer[7] 复制到 NewLayer[5] 中,这样如果 NewLayer[7] 更改,NewLayer[5] 将不会更改。

请注意,我不想创建一个新对象,而我想用另一个对象的属性替换一个对象的属性,这使得它与 Stackoverflow 上的其他问题有所不同,我认为这不是重复。

【问题讨论】:

  • 所以你想要一个新变量,它不是一个新对象,但是当它自己的属性之一改变时不改变另一个对象的属性?
  • 您可以为 NewLayerCounterMethod 创建事件。更改值后,您可以访问所有数据
  • @CompuChip 实际上我不想创建一个新的变量或对象,我想重新分配一个对象。我之前在 MATLAB 中编写过代码,在 MATLAB = 中执行此操作,而在 C# 中 = 是引用类型,其中一个对象的任何更改都会影响另一个对象。我
  • C# 默认对值类型进行复制。如果您想要值语义,请使用值类型(将您的 class 更改为 struct)。不过,请确保您了解其中的含义。
  • @Luaan 你的意思是如果我把 Class 改成 Struct 就可以了?

标签: c# object


【解决方案1】:

您需要克隆该对象,否则您只需将引用存储在两个字段中并同时更改它们。看到这个答案:

Creating a copy of an object in C#

How do you do a deep copy of an object in .NET (C# specifically)?

【讨论】:

  • 谢谢,但我认为推荐的方法可以创建一个新对象。但是,我想重新分配NewLayer[5]
【解决方案2】:

在这种情况下,您需要向NewLayerCounterMethod 类添加一个函数,在该类中将另一个类的所有属性复制到新类中。它看起来有点像这样:

public void TakeProperties(NewLayerCounterMethod otherObject)
{
    propA = otherObject.propA;
    propB = otherObject.propB;
    //And so on for all properties left
}

您可以添加保护,以便仅在新值与旧值不同时更新属性,但我建议将这些保护直接添加到属性中。

上面的方法就是这样调用的:

NewLayer[5].TakeProperties(NewLayer[7]);

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多