我想做这样的事情:
class BaseClass
{
private List<MyClass> list;
private void addData()
{
list.Add(new MyClass(this));
}
public void removeData(MyClass data)
{
list.Remove(data);
}
}
class MyClass
{
private BaseClass baseClass;
public MyClass(BaseClass baseClass)
{
this.baseClass = baseClass;
// DO SOMETHING
calculationDone();
}
private void calculationDone()
{
baseClass.removeData(this);
}
}
我的问题是list.Remove()
返回false,并且没有从列表中删除项目。我的代码有什么问题?
这是一个时间问题。
您正在calculationDone()
从构造函数进行调用,然后才能将该实例分配给调用方法中的列表。
只有完成构造函数(和计算)后,该项目才会添加到列表中。
public MyClass(BaseClass baseClass)
{
this.baseClass = baseClass;
// DO SOMETHING
calculationDone();
}
您代码中的顺序为:
这里的道义是不要将对象的所有工作(整个生命周期)都放在构造函数中。当拆分构造函数和计算量时,它将变为:
private void addData()
{
var temp =new MyClass(this);
list.Add(temp);
temp.DoCalculations(); // includes calculationDone()
}
这将按预期工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句