2014-11-24 2 views
2

에 제거합니다.다음과 같이 나는 클래스가 사용자 정의 HashSet의

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

지금, 나는 다음과 같은 방법으로 5 항목을 제거하려면 :

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

을하지만 다음과 같은 오류 얻을 : 문제가 무엇인지

cannot convert from 'int' to 'User' 

누구를 어떻게 나는 이것을 해결할 수 있는가?

+1

HashSet은 주문을 보장하지 않습니다. 다른 컬렉션 유형을 원할 수도 있습니다. – Jonesopolis

답변

3

HashSet은 목록 또는 배열이 아니며 인덱서가 없으며 색인을 통해 항목에 액세스 할 수 없습니다. 그 이유는 주문이 보장되지 않는다는 것입니다 (아이템을 절대 삭제하지 않으면 현재 구현에서 삽입 순서가 유지됩니다). 그 문제가되지 않는 경우가 ElementAtOrDefault를 사용할 수 있습니다

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

Anybody know what the issue is?

HashSet의 설명서에 명확하게 제거 방법 지정된 요소를 제거하는 것을 말한다 HashSet 객체로부터. 그리고 T 타입의 매개 변수는 제거 할 요소이며 인덱스 OR 키 또는 그와 같은 것이 아닙니다.

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

how I can resolve this?

는 @Jonesy는 귀하의 의견에 대답했다. 해시 세트가 순서를 보장하지 않기 때문에 다른 수집 유형 (예 : 일반 목록)을 사용하고, 다섯 번째 위치에있는 요소가 아닌 특정 요소를 제거하려면 해시 집합으로 요소를 삭제할 수 없습니다.

다섯 번째 위치에 어떤 요소가 있는지 신경 쓰지 않고 제거하려는 경우 @Tim Schmelter의 솔루션이 작동합니다.

관련 문제