是否有用于查询 C# 文件的 LINQ 查询提供程序之类的东西?
我有一个 Winforms 应用程序,用于帮助我生成代码以及补充 Visual Studio 对现有代码的编辑功能。我希望能够做的一件事是查询给定的类以查看是否存在方法。或查询类列表,或查询方法签名中具有特定 type
的类,等等。
此外,我希望能够在所述 C# 文件上运行通常的 CRUD,但我意识到这可能超出了这个问题的范围。
已解决!
感谢提出建议的人Roslyn ,特别感谢下面 Konrad Kokosa 提供的代码示例,我能够得到我需要的东西。
您需要做的第一件事是下载 Roslyn DLL(我使用的是 NuGet)。然后查询。这是获取类中所有方法的字母顺序列表的另一个示例:
static List<string> GetMethodList(string filename, string className)
{
var syntaxTree = SyntaxTree.ParseFile(filename);
var root = syntaxTree.GetRoot();
var @class = root.DescendantNodes().OfType<ClassDeclarationSyntax>().FirstOrDefault(md => md.Identifier.ValueText.Equals(className));
return (List<string>) @class.DescendantNodes().OfType<MethodDeclarationSyntax>().ToList().OrderBy(m => m.Identifier.ValueText).Select(m => m.Identifier.ValueText);
}
最佳答案
我发现 Roslyn 非常直观。以下是在指定类 className
中为指定 methodName
解析源文件的示例:
static void GetClassMethod(string filename, string className, string methodName)
{
var syntaxTree = SyntaxTree.ParseFile(filename);
var root = syntaxTree.GetRoot();
var @class = root.DescendantNodes()
.OfType<ClassDeclarationSyntax>()
.Where(md => md.Identifier.ValueText.Equals(className))
.FirstOrDefault();
var method = @class.DescendantNodes()
.OfType<MethodDeclarationSyntax>()
.Where(md => md.Identifier.ValueText.Equals(methodName))
.FirstOrDefault();
}
从这个示例中,您可以轻松构建查询所有类的文件。
关于c# - 是否有用于查询 C# 文件的 LINQ 查询提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145506/