gpt4 book ai didi

c# - 我是否正确实现了 Equals()/GetHashCode()?

转载 作者:太空狗 更新时间:2023-10-29 18:25:44 25 4
gpt4 key购买 nike

该程序正在使用此实现:

class Instrument
{
public string ClassCode { get; set; }
public string Ticker { get; set; }
public override string ToString()
{
return " ClassCode: " + ClassCode + " Ticker: " + Ticker + '.';
}
}

但是因为我需要在 Dictionary 中使用 Instrument,所以我决定实现 equals/hashcode:

class Instrument
{
public string ClassCode { get; set; }
public string Ticker { get; set; }
public override string ToString()
{
return " ClassCode: " + ClassCode + " Ticker: " + Ticker + '.';
}

public override bool Equals(object obj)
{
if (obj == null)
return false;

Instrument instrument = obj as Instrument;
if (instrument == null)
return false;

return ((ClassCode.Equals(instrument.ClassCode)) && (Ticker.Equals(instrument.Ticker));
}

public override int GetHashCode()
{
int hash = 13;
hash = (hash * 7) + ClassCode.GetHashCode();
hash = (hash * 7) + Ticker.GetHashCode();
return hash;
}
}

现在程序停止运行了。在这样或类似的地方我收到“KeyNotFoundException”:

if (cache.Keys.Any(instrument => instrument.Ticker == newTicker && instrument.ClassCode == newClassCode))

是否有可能某些代码片段假设没有实现 equals 和 hashcode?或者可能我只是错误地实现了它们?抱歉,我对最后一段代码不熟悉C#中的高级功能,也不知道它与equals或hashCode有何联系。

最佳答案

您的 HashCode 和 Equals 方法应该仅依赖于不可变 属性 - 您的实现使用 ClassCode 和 Ticker,它们都有 setter,因此是可变的。

关于c# - 我是否正确实现了 Equals()/GetHashCode()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5700099/

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