gpt4 book ai didi

c# - 当键不是简单的原始类型时使用 ContainsKey()

转载 作者:行者123 更新时间:2023-11-30 19:47:32 25 4
gpt4 key购买 nike

我的字典的 ContainsKey() 方法不起作用 - 我如何“覆盖 GetHashCode()”以使其起作用?

最佳答案

您必须同时覆盖 GetHashCode()Equals()来表示等价。例如:

public sealed class MyType : IEquatable<MyType> {
private readonly int foo;
private readonly string bar;
public int Foo { get { return foo; } }
public string Bar { get { return bar; } }

public MyType(int foo, string bar) {
this.foo = foo; this.bar = bar;
}
public bool Equals(MyType other) {
if(other == null) return false;
return other.foo == this.foo && other.bar == this.bar;
}
public override bool Equals(object other) {
return Equals(other as MyType);
}
public override int GetHashCode() {
int result = 29;
result = result * 13 + foo.GetHashCode();
result = result * 13 + (bar == null ? 0 : bar.GetHashCode());
return result;
}
}

请注意 IEquatable<T>完全是可选的,但对于避免使用盒子的结构特别有用。注意:如果定义平等的部分是不可变的,它会让生活更健康。

关于c# - 当键不是简单的原始类型时使用 ContainsKey(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6621677/

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