我正在尝试遍历所有继承特定基类的类。我发现大多数链接都参考了有形的 T4 编辑器。像这样的答案,几乎可以满足我的要求
使用-a-%20specific-attribute-using-t4-envdte 获取所有装饰方法
问题是我找不到他正在使用的方法GetAllCodeElementsOfType
我正在使用这个模板
我是否使用了正确的模板?
我正在尝试遍历所有继承特定基类的类。我发现大多数链接都参考了有形的 T4 编辑器。像这样的答案,几乎可以满足我的要求
使用-a-%20specific-attribute-using-t4-envdte 获取所有装饰方法
问题是我找不到他正在使用的方法GetAllCodeElementsOfType
我正在使用这个模板
我是否使用了正确的模板?
这是我编写的帮助方法,用于获取实现特定基类的所有子类
public IEnumerable<CodeClass> GetSubClasses(string baseClass, Project project)
{
var classes = VisualStudioHelper.CodeModel.GetAllCodeElementsOfType(project.CodeModel.CodeElements, EnvDTE.vsCMElement.vsCMElementClass, false);
var subClasses = new List<CodeClass>();
foreach (CodeClass @class in classes)
{
foreach (CodeClass @base in GetInheritance(@class))
{
if (@base.FullName == baseClass)
subClasses.Add(@class);
}
}
return subClasses;
}
public IEnumerable<CodeClass> GetInheritance(CodeClass @class)
{
return GetInheritance(@class, new List<CodeClass>());
}
public IEnumerable<CodeClass> GetInheritance(CodeClass @class, List<CodeClass> collection)
{
foreach (CodeClass @base in @class.Bases)
{
collection.Add(@base);
GetInheritance(@base, collection);
}
return collection;
}
我将用 Linq 重写它们,我发现如果你在无类型数组上执行 .Cast<> ,你可以使用 Linq 这样代码会更简洁一些