Comment faire une boucle par le biais d'un HashSet<T> quand c'est comme un objet, et le T peut être quelque chose?

Je suis en utilisant la Valeur Injecters à la carte à partir du 1er type à l'autre à l'aide de la LoopValueInjection et en remplaçant la SetValue(object v) méthode avec une certaine logique personnalisée. Je suis en train d'essayer de détecter si un HashSet est passé en et de passer par le HashSet et appliquer une méthode pour chaque élément pour faire un peu de ménage. Les questions que je vais avoir sont parce que le paramètre est juste un objet et je ne sais pas quel est le type de l'élément sera dans le HashSet. Par exemple, il pourrait être HashSet ou HashSet.

Voici le code que j'ai actuellement, mais je suis un InvalidCastException.

    protected override object SetValue(object v)
    {
        if (type.Name == "HashSet`1")
        {
            var genericType = type.GetGenericArguments()[0];

            //this line throws the InvalidCastException 
            var cleanHashSet = (HashSet<object>)Activator.CreateInstance(type);

            foreach (var item in (HashSet<object>)v)  //I'm sure this cast will throw as well
            {
                cleanHashSet.Add(Clean(item));
            }

            return cleanHashSet;
        }

        return base.SetValue(v);
    }

Je suppose que la question principale est de savoir comment puis-je faire une boucle par le HashSet qui est transmis sous la forme d'un objet une fois que j'déterminer c'est en fait un HashSet de quelque sorte? Je pense aussi que j'ai besoin de créer un nouveau vide HashSet du type spécifique ainsi donc, je peux mettre chaque élément qui obtient nettoyé.

OriginalL'auteur Jeff Treuting | 2013-03-19