Je dois pouvoir accéder à une propriété par réflexion et, sachant que cette propriété est IEnumerable, ajouter un objet à cette propriété.Ajouter un objet à un IEnumerable <> via la réflexion
Quelque chose comme ceci:
Object o;
MemberInfo m;
Array arr; // Except use IEnumerable, may have to take account of value/ref types
arr = (Array)((PropertyInfo)m).GetValue(o, null); }
List<o.GetType()> newArr = new List<o.GetType()>(); /* fails */
newArr.AddRange(arr);
newArr.Add(o);
((PropertyInfo)m).SetValue(o, newArr.ToArray(), null);
Pouvez-vous me aider où je vais mal :-)
Solution:
Voir acceptées commentaires de réponse. Aussi (Get the actual type of a generic object parameter) est d'aide.
Merci pour me pointant dans la bonne direction. Malheureusement, je ne pense pas que je peux écrire une solution générique qui traite des propriétés de string [], List, List (même en omettant Dictionary ). Le problème est que vous ne pouvez pas lancer listInstance à une liste afin d'ajouter et même si j'ai créé un IEnumerable je ne peux pas remplacer un champ de propriété de type Liste avec ce nouvel objet créé. –
Est-il possible de prendre du recul et de considérer le problème global que vous êtes en train de résoudre, pour voir si vous pouvez utiliser une approche plus compilable en temps de compilation? La réflexion est puissante mais finit par être compliquée et difficile à maintenir. Si vous ne pouvez pas changer ce que vous faites, il existe toujours un moyen de prendre en charge tout ce que vous avez mentionné, il nécessite juste un code de réflexion laide. J'oublierais probablement de remplacer la référence sous-jacente et je rechercherais simplement une méthode Add que je pourrais utiliser (par exemple, propertyType.GetMethod ("Add")), puis la gestion de cas particuliers de tableaux. – bobbymcr
Il s'agit de mapper de manière générique des classes de code sur un fichier de données, donc la réflexion doit être la réponse. Merci, cependant, en combinaison votre idée et cette question (http://stackoverflow.com/questions/1371347/get-the-actual-type-of-a-generic-object-parameter/1371378#1371378) + manipulation des tableaux aidé :-) –