2010-03-30 14 views

cevap

8

Benzer bir şey yapmaya çalışıyorum ve aradığınız isme ulaşıncaya kadar yalnızca ad ve sınıflar arasında arama yapan aşağıdakileri buldum.

Çoğu durumda, kısmi bir sınıfla karşılaşıldığında yalnızca ilk isabeti geri getirecek ve dosyanın bir modeli olduğu için yalnızca bu dosyada yer alan üyelere sahip olacağı görülüyor. Bununla ilgili ne yapacağımı hala öğreniyorum.

Bu, bir T4 şablonundan gelir ve T4 Araç Takımı'nı (TransformationContext'in nereden geldiğini) kullanır, bu nedenle, bunu kullanmıyorsanız, yalnızca bir proje öğesi elde edin ve Project.CodeModel.CodeElements öğesini yinelemeli olarak geçirin. FindClass yöntemi.

Örnek kullanım FindClass ("MyCompany.DataClass") olur;

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

Teşekkürler! Sonunda buna benzer bir şey yaptım. Cevabınızı kabul edeceğim o zamandan beri ... şu ana kadar tek haklısın :) –

+0

İlgi dışı, kısmi derslerle uğraştın mı? Aramayı sadece belirli ad alanlarıyla sınırlamak zorunda kalabileceğimi düşünüyordum ve daha sonra bütün eşleşmeleri geri döndürerek arama yapmalıyım. – RSlaughter

+0

Aslında bir üyenin bildirimini bir tür içinde bulmaya çalışıyorum, ama bu beni daha da yakınlaştırıyor. Çok teşekkürler! – TheXenocide

İlgili konular