2010-03-30 6 views

Répondre

8

J'ai essayé de faire quelque chose de similaire, et j'ai trouvé ce qui suit, qui cherche simplement dans les espaces de noms et les classes jusqu'à ce qu'il atteigne celui que vous recherchez.

Cela semble fonctionner dans la plupart des cas, mais lorsque vous rencontrez une classe partielle, elle renvoie uniquement le premier hit, et comme il s'agit d'un modèle du fichier, seuls les membres contenus dans ce fichier sont présents. Toujours à déterminer ce qu'il faut faire à ce sujet.

Cela vient d'un modèle T4 et utilise Toolkit T4 (qui est l'endroit où TransformationContext vient) donc si vous ne l'utilisez que, juste obtenir une prise d'un élément de projet et passer à la Project.CodeModel.CodeElements récursive Méthode FindClass

Exemple d'utilisation: FindClass ("MyCompany.DataClass");

private CodeClass FindClass(string className) 
{ 
    return FindClass(TransformationContext.Project.CodeModel.CodeElements, className); 
} 

private CodeClass FindClass(CodeElements elements, string className) 
{ 
    foreach (CodeElement element in elements) 
    {  
     if(element is CodeNamespace || element is CodeClass) 
     { 
      CodeClass c = element as CodeClass; 
      if (c != null && c.Access == vsCMAccess.vsCMAccessPublic) 
      { 
       if(c.FullName == className) 
        return c; 

       CodeClass subClass = FindClass(c.Members, className); 
       if(subClass!= null) 
        return subClass; 
      } 

      CodeNamespace ns = element as CodeNamespace; 
      if(ns != null) 
      { 
       CodeClass cc = FindClass(ns.Members, className); 
       if(cc != null) 
        return cc; 
      } 
     } 
    } 
    return null; 
} 
+0

Merci! J'ai fini par faire quelque chose de similaire. Je vais accepter votre réponse depuis ... eh bien vous êtes le seul à ce jour :) –

+0

Par intérêt, avez-vous traité avec des cours partiels? Je pensais que je devrais juste limiter la recherche à des espaces de noms particuliers, et ensuite chercher tout au long, en retournant tous les matches. – RSlaughter

+0

Je suis actuellement à la recherche d'un moyen de trouver la déclaration d'un membre dans un type, mais cela me rapproche beaucoup plus. Merci beaucoup! – TheXenocide

Questions connexes