【发布时间】: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