【问题标题】:Remove on custom HashSet删除自定义 HashSet
【发布时间】:2014-11-24 13:00:03
【问题描述】:

我有一堂课如下:

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' 

有人知道问题出在哪里,我该如何解决?

【问题讨论】:

  • HashSet 不能保证顺序。您可能想要不同的集合类型

标签: c# hashset


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    有人知道是什么问题吗?

    Hashset 的文档清楚地说明了 remove 方法 从 HashSet 对象中删除指定的元素。 类型 T 的参数是要删除的元素,而不是索引或键或任何东西像这样。

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

    我该如何解决这个问题?

    @Jonesy 在你的 cmets 中回答了这个问题。使用不同的集合类型(例如通用列表),因为哈希集不能保证顺序,如果您想删除特定元素而不是第五位的任何元素,您将无法使用哈希集来完成。

    如果您不关心第五个位置的元素,而只想删除它,那么@Tim Schmelter 的解决方案将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-02
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2020-06-19
      相关资源
      最近更新 更多