是否存在用于查询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);
}
Run Code Online (Sandbox Code Playgroud)
我发现罗斯林非常直观.以下是解析methodName指定类中指定的源文件的示例className:
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();
}
Run Code Online (Sandbox Code Playgroud)
从这个例子中,您可以轻松地使用文件构建查询所有类.
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |