从哈希集中选择所有特定项目

本文关键字:项目 哈希 集中 选择 | 更新日期: 2023-09-27 18:31:29

我有一个简单的类叫做User:

public class User
{
    public int ID { get; set; }
    public int MI { get; set; }
    public User(int id, int mi)
    {
        ID = ID;
        MI = mi;
    }
}

稍后,我有一个用户的哈希集,我想从中获取 ID 并分配给 HashSet 中的 HashSet,如下所示:

    HashSet<Users> _users = new HashSet<>();
    //code where several User objects are assigned to _users
    HashSet<int> _usersIDs = new HashSet<int>();
    _usersIDs = _users.Select("ID")

但这不起作用,我怎样才能成功地将_users中的所有 int ID 分配给新的 HashSet?

从哈希集中选择所有特定项目

你可以做:

HashSet<int> _usersIDs = new HashSet<int>(_users.Select(user=> user.ID));

但是,如果您要在HashSet<T>中使用它并且可能Eqauls,则应覆盖User类的GetHashCode

,例如:
public class User
{
    protected bool Equals(User other)
    {
        return ID == other.ID && MI == other.MI;
    }
    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        if (ReferenceEquals(this, obj)) return true;
        if (obj.GetType() != this.GetType()) return false;
        return Equals((User) obj);
    }
    public override int GetHashCode()
    {
        unchecked
        {
            return (ID*397) ^ MI;
        }
    }
    public int ID { get; set; }
    public int MI { get; set; }
    public User(int id, int mi)
    {
        ID = id; //based on @Jonesy comment
        MI = mi;
    }
}