gpt4 book ai didi

c# - 列表中的所有引用都指向 'this'

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:05 25 4
gpt4 key购买 nike

在 Unity 中运行 c# .NET 3.5 代码会产生一个非常奇怪的问题

class X
{
static List<X> _l = new List<X>();

public X()
{
_l.Add(this);
Debug.Log(_l.Count(x=>x==this));
}
}

对于我创建的每个对象,计数器都会增加 1... 是什么原因造成的?这当然是一个更大的应用程序的片段,但核心问题很简单;当从构造函数添加到列表然后从所述列表中检索自身时,无论对象是如何创建的,都应该只给出 1 个结果和 1 个结果;对吧?

如果需要更多代码,我会添加它,但我希望有人以前有过这种经历。我不确定使用的是哪个版本的 Mono Unity,但我认为它是 2.0。

最佳答案

Unity 可能会自动实现 Object.Equals 方法和相等运算符覆盖,这可能导致 == 检查不检查引用 平等,但还有一些其他标准。

移除对 MonoBehaviour(或 UnityEngine.Object)的继承,实现您自己的运算符覆盖,或将表达式更改为 _l.Count(x => Object.ReferenceEquals(x, this) 可以解决它。

关于c# - 列表中的所有引用都指向 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635268/

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