删除自定义HashSet

时间:2014-11-24 13:00:04

标签: c# hashset

我有一个课程如下:

public class User
{
    public int ID { get; set; }
    public int PPN { get; set; }

    public User(int id, int ppn)
    {
        ID = id;
        PPN = ppn;
    }
}

我已经声明了它的HashSet类型。

HashSet<User> users = new HashSet<User>();

现在,我想删除以下方法中的第5个条目:

    public void Delete() {
      users.Remove(5);
}

但是我收到以下错误:

cannot convert from 'int' to 'User' 

有人知道问题是什么以及我如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

HashSet不是列表或数组,它没有索引器,您无法通过索引访问项目。原因是订单无法保证(如果您从未删除任何项目,它将保留当前实现中的插入顺序)。如果这没关系,您可以使用ElementAtOrDefault

User fifth = users.ElementAtOrDefault(4);
if (fifth != null) users.Remove(fifth);

答案 1 :(得分:1)

  

有人知道这是什么问题吗?

Hashset的文档明确指出remove方法从HashSet对象中删除指定的元素。并且类型T的参数是要删除的元素,而不是索引OR键或任何东西那样的。

http://msdn.microsoft.com/en-us/library/bb342694%28v=vs.110%29.aspx

  

我该如何解决这个问题?

@Jonesy在你的评论中回答了这个问题。使用不同的集合类型(例如,通用列表),因为哈希集不保证顺序,并且如果要删除特定元素而不是第五个位置的任何元素,则无法使用哈希集执行此操作。

如果您不关心第五个位置上的元素是什么,并且您只想将其删除,那么来自@Tim Schmelter的解决方案将起作用。