gpt4 book ai didi

c# - 我是否更改了被覆盖的 `==` 运算符的意图?

转载 作者:行者123 更新时间:2023-11-30 17:20:00 25 4
gpt4 key购买 nike

以下重载的==运算符是QL.netCalender 类的一部分|

    public static bool operator ==(Calendar c1, Calendar c2)
{
return (c1.empty() && c2.empty())
|| (!c1.empty() && !c2.empty() && c1.name() == c2.name());
}

public bool empty() { return (object)calendar == null; }

当我尝试访问 SouthAfricanCalender 属性时,我收到一个 System.NullReferenceException : Object reference not set to an instance of an object. 这促使我深入研究来源。

public SouthAfrica SouthAfricanCalender
{
get
{
if (_calender == null)
{
_calender = new SouthAfrica();
}
return _calender;
}
set
{
if (_calender == null)
{
_calender = value;
}
}
}

SouthAfrica _calender;

我根据答案here对重载进行了如下修改

public static bool operator ==(Calendar c1, Calendar c2)
{
if ( object.ReferenceEquals(c1,c2)) return true;
if ((object)c1 == null || (object)c2 == null) return false;

return (c1.empty() && c2.empty())
|| (!c1.empty() && !c2.empty() && c1.name() == c2.name());
}

我的问题是,我的修改是否改变了原始代码的意图?

编辑:关于如何进一步清理它有什么建议吗?

最佳答案

没有。您确保两者都是对象,并在它们不是的地方做出相应的响应(假设 ReferenceEquals 可以处理双空值)。然后您只需执行相同的检查。整个 .empty() 东西是完全没有必要的,顺便说一句,你已经知道它不是空的,只是返回名称比较。

关于c# - 我是否更改了被覆盖的 `==` 运算符的意图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4450317/

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