从给定的外部C#源代码中提取所有变量名称

时间:2014-04-28 11:36:05

标签: c# code-analysis

有没有办法从C#代码中提取所有变量名,即一个获取源代码文件并在该源代码中返回变量名数组的函数?

1 个答案:

答案 0 :(得分:3)

最近发布了Microsoft Roslyn的预览版本,这应该使这个相对简单,因为变量名称不需要复杂的类型解析;单个代码文件之外不需要上下文。

这是一个示例实现;我没有深入研究它以验证是否所有变量声明都匹配,但包括参数,字段,局部变量和lambda参数。这取决于您定义的变量名称。例如您可能还想包含类型参数名称?

string sourceCode = "class A { " +
                "int field; " +
                "void B(string parameter) { " +
                "int a, b; int c; " +
                "Action<string> q = (x) => { Console.WriteLine(x); }; " +
                "}";

//or parsefile etc
var syntaxTree = CSharpSyntaxTree.ParseText(sourceCode);

string[] identifierNames = syntaxTree.GetRoot().DescendantNodes()
            .OfType<VariableDeclaratorSyntax>().Select(v => v.Identifier.Text)
            .Concat(syntaxTree.GetRoot().DescendantNodes().OfType<ParameterSyntax>().Select(p => p.Identifier.Text))
            .ToArray();
//identifierNames contains "field", "a", "b", "c", "q", "parameter", "x"

为了完成这项工作,需要包含Roslyn(使用Nuget):

PM> Install-Package Microsoft.CodeAnalysis -Pre