我有一个课程如下:
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'
有人知道问题是什么以及我如何解决这个问题?
答案 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的解决方案将起作用。