我有一个创建对象副本的方法
for (let [index, value] of Array.from(document.querySelectorAll('div')).entries()) {
console.log(index); // Key
console.log(value); // Value
}
还有一些像这样的儿童班:
protected Node CreateCopy()
{
return new Node(InputCount, OutpuCount, Name);;
}
有没有办法自动创建它们的副本?
(需要儿童类的类型不是基础)
答案 0 :(得分:4)
有没有办法自动创建它们的副本?
您可以使用从Object
继承的MemberwiseClone
方法:
protected Node CreateCopy()
{
return (Node)MemberwiseClone();
}
请注意,它将是浅层副本,即引用类型成员将通过引用复制,而不是克隆。
如果需要深层复制,可以序列化和反序列化对象(效率不高非常低效,仅适用于可序列化类型),或使用AutoMapper之类的工具。
答案 1 :(得分:1)
如果您需要基类的副本,Thomas Levesque的答案很棒。但是既然你要求孩子类型,我只会添加这个经典的OOP建议:
class Node
{
protected int _num;
protected string _text;
public Node(int num, string text)
{
_num = num;
_text = text;
}
public virtual Node Clone()
{
return new Node(_num, _text);
}
}
class SuperNode : Node
{
DateTime _superTime;
public SuperNode(int num, string text, DateTime time) :base(num, text)
{
_superTime = time;
}
public override Node Clone()
{
return new SuperNode(_num, _text, _superTime);
}
}