gpt4 book ai didi

.net - 使用对象的字段作为通用字典键

转载 作者:行者123 更新时间:2023-12-03 04:39:01 25 4
gpt4 key购买 nike

如果我想使用对象作为字典的键,我需要重写哪些方法才能使它们以特定方式进行比较?

假设我有一个具有属性的类:

class Foo {
public string Name { get; set; }
public int FooID { get; set; }

// elided
}

我想创建一个:

Dictionary<Foo, List<Stuff>>

我希望具有相同 FooIDFoo 对象被视为同一组。我需要在 Foo 类中重写哪些方法?

总结一下:我想将 Stuff 对象分类到列表中,并按 Foo 对象分组。 Stuff 对象将有一个 FooID 将它们链接到其类别。

最佳答案

默认情况下,两个重要的方法是 GetHashCode()Equals() 。重要的是,如果两个事物相等( Equals() 返回 true),则它们具有相同的哈希码。例如,您可以“return FooID;”作为GetHashCode()如果你想把它作为比赛。您还可以实现 IEquatable<Foo> ,但这是可选的:

class Foo : IEquatable<Foo> {
public string Name { get; set;}
public int FooID {get; set;}

public override int GetHashCode() {
return FooID;
}
public override bool Equals(object obj) {
return Equals(obj as Foo);
}
public bool Equals(Foo obj) {
return obj != null && obj.FooID == this.FooID;
}
}

最后,另一种选择是提供 IEqualityComparer<T>做同样的事情。

关于.net - 使用对象的字段作为通用字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/634826/

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