Nous sommes désolés de vous le demander à nouveau. J'ai lu les sujets connexes ici pendant des heures et ne comprends toujours pas certains des problèmes avec le casting et les génériques. J'essaie de créer notre propre classe HashSet, car nous ne pouvons pas encore utiliser .net 3.5.puis-je lancer un objet à son type générique en C#?
L'erreur est dans la méthode RetainAll, ci-dessous. Il compile bien mais je reçois une erreur d'exécution 'Impossible de convertir un objet de type' System.Collections.DictionaryEntry 'pour taper' monentreprise.UnivID 'dans l'instruction foreach. Est-ce que cela signifie que je ne peux pas convertir un objet générique en type d'implémentation? J'ai essayé quelques choses comme
foreach ((T) obj in set)
mais ils ne compilent pas.
Code pertinent est:
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);
}
}
}
}
L'extrait de classe implémentant est
public sealed class UnivIDSet : ISet {
private readonly ISet<UnivID> univIDs;
public UnivIDSet() : base() {
univIDs = new HashSet<UnivID>();
}
}
et nous avons notre classe UnivID
qui sont en fait les objets dans les ensembles.
oui, c'était ça. Merci! Je suis un peu gêné maintenant par la question. J'aurais dû savoir ou être capable de le comprendre. – user26270
Ha ha, arrive à nous tous. Parfois, une autre paire d'yeux aide. –