0

J'utilise l'extension d'interception Ninject pour implémenter SQLLogging. J'ai une variable appelée 'param' et c'est un type Anonymous tel qu'il est montré dans la fenêtre Watch (Voir l'image ci-dessous). Quand je fais param.ToString() il est revenuListe d'itérations <int> dans un type anonyme

{Countries = {System.Collections.Generic.List<int>} 


var param = invocation.Request.Arguments[0]; 

où invoation est de type Ninject.Extensions.Interception.IInvoation Interface.

Ce que je dois obtenir est un nom et ses articles. Donc, pour celui-ci je veux quelque chose comme "Pays = 36, 124, 826, 840".

Comment parcourir la liste pour atteindre cet objectif? Notez également que le nom Countries dans ce cas n'est pas connu avant l'exécution. Il pourrait être quelque chose comme

{Ages = {System.Collections.Generic.List<int>} 

ou

{Subjects={System.Collections.Generic.List<string>} 

object in watch window

+3

La propriété de type anonyme ne peut pas être déclarée à l'exécution, elle doit être une chose de compilation. Comment la variable 'params' est-elle définie? – MarcinJuraszek

+0

Eh bien, faites-le savoir à la compilation. Les types anonymes sont conçus à 100% pour la compilation et les génériques, il est inutile de les utiliser comme "valeur de retour générique". Arrêtez d'utiliser des types anonymes. – Luaan

+0

param est un élément de l'objet [] et j'ai hérité de cette base de code, donc je ne peux pas passer à un autre type. La fenêtre Regarder a répertorié tous les éléments dans VS. Comment faire quelque chose de similaire dans C#? –

Répondre

0

Vous voulez sans doute écrire votre propre Visualiseur pour List<T>. Il sera utilisé pour toutes les listes, pas seulement celles de vos types anonymes, mais il pourra quand même vous être utile.

https://msdn.microsoft.com/en-us/library/e2zc529c.aspx

+0

J'ai besoin d'implémenter cette logique d'itération dans mon application C#. J'utilise Ninject Interceptor pour implémenter SQLLogging et cette classe proxy reçoit l'objet [] et l'un des éléments est . –

0

Vous pouvez utiliser la réflexion, les propriétés en boucle, vérifier le type et si elle est une liste, itérer la liste.