Поскольку вы хотите, чтобы FooID
был идентификатором для группы, вы должны использовать его в качестве ключа в словаре вместо объекта Foo:
Dictionary<int, List<Stuff>>
Если вы используете объект Foo
в качестве ключа, вы просто реализуете метод GetHashCode
и Equals
, чтобы рассматривать только свойство FooID
. Свойство Name
было бы просто мертвым весом для Dictionary
, так что вы просто использовали бы Foo
в качестве оболочки для int
.
Поэтому лучше использовать значение FooID
напрямую, и тогда вам не нужно ничего реализовывать, поскольку Dictionary
уже поддерживает использование int
в качестве ключа.
Edit:
Если вы все равно хотите использовать класс Foo
в качестве ключа, IEqualityComparer<Foo>
легко реализовать:
public class FooEqualityComparer : IEqualityComparer<Foo> {
public int GetHashCode(Foo foo) { return foo.FooID.GetHashCode(); }
public bool Equals(Foo foo1, Foo foo2) { return foo1.FooID == foo2.FooID; }
}
Использование:
Dictionary<Foo, List<Stuff>> dict = new Dictionary<Foo, List<Stuff>>(new FooEqualityComparer());