jav*_*red 8 .net c# gethashcode
该计划正在实施此实施:
class Instrument
{
public string ClassCode { get; set; }
public string Ticker { get; set; }
public override string ToString()
{
return " ClassCode: " + ClassCode + " Ticker: " + Ticker + '.';
}
}
Run Code Online (Sandbox Code Playgroud)
但是因为我需要在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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在该程序已停止工作.在这样或类似的地方,我收到"KeyNotFoundException":
if (cache.Keys.Any(instrument => instrument.Ticker == newTicker && instrument.ClassCode == newClassCode))
Run Code Online (Sandbox Code Playgroud)
是否有可能某些代码段假定equals和hashcode未实现?或者我可能只是错误地实现了它们?抱歉,我不熟悉C#中的这些高级功能作为最后一段代码,不知道它是如何与equals或hashCode连接的.
您的HashCode和Equals方法应仅依赖于不可变属性 - 您的实现使用ClassCode和Ticker,它们都具有setter并因此是可变的.
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |