gpt4 book ai didi

c# - 列表 - 如何通过引用查找项目?

转载 作者:行者123 更新时间:2023-11-30 22:13:48 24 4
gpt4 key购买 nike

我想做这样的事情:

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();
}

您的代码中的顺序是:

  • 添加数据()
    • X 的构造函数
      • 计算完成
      • list.Remove(X)//失败,找不到 X
    • 列表.添加(X)

这里的寓意是不要将对象的所有工作(整个生命周期)都放在构造函数中。当您拆分构造函数和计算时,它变为:

private void addData()
{
var temp =new MyClass(this);
list.Add(temp);
temp.DoCalculations(); // includes calculationDone()
}

这将按预期工作。

关于c# - 列表 - 如何通过引用查找项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18869611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com