죄송합니다. 다시 한 번 문의하십시오. 나는 여기 몇 시간 동안 관련 주제를 읽었으며 캐스팅과 제네릭에 대한 문제를 아직 많이 얻지 못했다. .net 3.5를 사용할 수 없기 때문에 우리 자신의 HashSet 클래스를 만들려고합니다.C#에서 제네릭 형식의 개체를 캐스팅 할 수 있습니까?
오류는 아래의 RetainAll 메서드에 있습니다. 잘 컴파일되지만 런타임 오류가 발생합니다. ''System.Collections.DictionaryEntry '유형의 객체를 캐스트 할 수 없으므로 foreach 문에'mycompany.UnivID '를 입력하십시오.
일반 객체를 구현 유형으로 변환 할 수 없다는 뜻입니까? 나는 같은 것을 시도했다.
foreach ((T) obj in set)
그러나 그들은 컴파일하지 않는다.
관련 코드는 다음과 같습니다
는public sealed class HashSet<T> : ISet<T> {
private readonly Hashtable set;
public HashSet() {
this.set = new Hashtable();
}
public void RetainAll(ISet<T> c) {
lock (set) {
foreach (T obj in set) {
if (!c.Contains(obj))
this.set.Remove(obj);
}
}
}
}
구현 클래스 조각은
public sealed class UnivIDSet : ISet {
private readonly ISet<UnivID> univIDs;
public UnivIDSet() : base() {
univIDs = new HashSet<UnivID>();
}
}
이며, 우리는 실제로 세트에서 객체 우리 UnivID
클래스를 가지고있다.
예, 맞았습니다. 감사! 나는이 질문에 당황 스럽다. 나는 그 사실을 알고 있었거나 알아낼 수 있어야했습니다. – user26270
하하, 우리 모두에게 발생합니다. 때로는 또 다른 한 쌍의 눈이 도움이됩니다. –