我正在尝试将值从一个字典复制到另一个字典,因此当在新字典中更改该值时,它不会更改旧值。现在,我相信我是在复制地址。
public Cube Right(Cube cube) {
Dictionary<SidePosition, Side> newSides = new Dictionary<SidePosition, Side>(cube.Sides);
for (int i = 0; i < RightSideOrder.Count; i++) {
for (int j = 0; j < RightFaceOrder.Count; j++) {
newSides[RightSideOrder[i]].Faces[RightFaceOrder[j]] =
cube.Sides[RightSideOrder[GetAntecedantSideIndex(i)]]
.Faces[RightFaceOrder[j]];
}
}
return cube;
}
private int GetAntecedantSideIndex(int currentIndex) {
if (currentIndex == 0)
return 3;
return currentIndex - 1;
}
}
Cube
及其包含在Side
字典中的值都是结构。我是C#的新手,所以如果命名约定不对,我深感抱歉。
根据我的研究/与人们交谈,该解决方案可能涉及ICloneable或新的IDictionary实现,但到目前为止,这两种方法都还没有运气。
如果需要更多详细信息,可以在这里找到完整的项目:https://github.com/Gregam3/RubicksCubeSolver
代码摘录来自一个名为CubeManipulator的类
TLDR;如何从字典中获取值作为值类型
答案 0 :(得分:0)
遵循此article
您可以使用深度复制操作
执行深度复制操作时,克隆的Person对象, 包括其Person.IdInfo属性在内,无需修改即可 影响原始对象。
类似的东西:
public class SidePosition
{
public IdInfo IdInfo;
public SidePosition DeepCopy()
{
SidePosition other = (SidePosition) this.MemberwiseClone();
other.IdInfo= new IdInfo(IdInfo.IdNumber);
return other;
}
}
public class Side
{
public IdInfo IdInfo;
public Side DeepCopy()
{
Side other = (Side) this.MemberwiseClone();
other.IdInfo= new IdInfo(IdInfo.IdNumber);
return other;
}
}
public Cube Right(Cube cube) {
Dictionary<SidePosition, Side> newSides = new Dictionary<SidePosition, Side>();
foreach(var item in cube.Sides)
newSides.Add(new SidePosition(item.key), new Side(item.value));
//your logic
}
答案 1 :(得分:0)
查看下面的链接以查看制作字典副本的示例,这样一来,更改一本词典中的值不会影响复制后的另一本词典: