【问题标题】:Copy an object in universal Windows Application (c#)在通用 Windows 应用程序中复制对象(c#)
【发布时间】:2015-08-11 09:29:58
【问题描述】:

想要将对象的副本添加到通用 Windows 应用程序中的列表中。我尝试了几种方法,发现 IClonable、BinaryFormatter、IFormatter 在 WinRT 应用程序中都不可用。请建议我将对象复制到新对象的合适方法。在下面找到我的代码。

foreach (var ctrls in _listctrldata)
{
    for (int index = 0; index < ctrls.Controls.Control.Count; )
     {
        listofcontrolvalues.Add(ctrls.Controls.Control[index]);
        index++;
     }

   SetControlvalues(null, _vcontainer, listofcontrolvalues);

 //_vcontainer changes everytime the loop rotates and Should create a copy of  _vcontainer here//  

  VerticalContainer vcont = new VerticalContainer ();
  vcont = _vcontainer;

 _listcontrols.Add(vcont);

}

【问题讨论】:

  • 不要复制对象,这不是一个好主意,而且与 C# 的编写方式不一致。也许每次都创建一个 _vcontainer。也许从 _vcontainer 中的数据创建一个新对象以添加到您的列表中。不要复制。
  • 我面临的问题是,即使在为每个循环旋转创建新实例之后,我最终在列表中得到相同的值(即所有值都更改为最后添加到列表中的值)。请查看我的更新代码。
  • VerticalContainer vcont = new VerticalContainer (); 行毫无意义,因为您分配了vcont = _vcontainer; 变量vcont 现在指向与_vcontainer 相同的对象。我会阅读reference types 的工作原理。

标签: c# windows-8 windows-runtime win-universal-app


【解决方案1】:

我不知道 VerticalContainer 是什么类。

如果是你自己定义的.NET类,你可以只定义一个克隆方法来创建一个新对象并复制所有内置数据类型字段。 如果是 Windows Runtime 类,恐怕你不能轻易复制它,因为有一些内部和私有数据成员是你无法访问的。

在您的代码中。 VerticalContainer vcont = new VerticalContainer (); vcont = _vcontainer;

您只是将新创建的对象的vcont引用更改为旧的_vcontainer,这不起作用,您需要将_vcontainer中的所有字段一一复制到vcont。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2013-03-14
    相关资源
    最近更新 更多