我尝试使用 Roslyn 获取数组值。例如,如果我有这样的 C# 代码:
int[] arrInt = {10, 20, 30, 40, 50};
那么如何获取 arrInt[0] 为 10、arrInt[1] 为 20 等信息。
我鼓励您查看文档、常见问题解答和示例,尤其是有关语法和语义分析的部分。
这是解决方案:
static void Main(string[] args)
{
string code = "int[] arrInt = {10, 20, 30, 40, 50};";
//Parse Syntax tree
var tree = Roslyn.Compilers.CSharp.SyntaxTree.ParseText(code);
//Locate the arrInt identifier in the Syntax tree
var declarator = tree.GetRoot().DescendantNodesAndSelf().Where(t => t.Kind == Roslyn.Compilers.CSharp.SyntaxKind.VariableDeclarator
&& ((Roslyn.Compilers.CSharp.VariableDeclaratorSyntax)t).Identifier.ValueText == "arrInt").First() as Roslyn.Compilers.CSharp.VariableDeclaratorSyntax;
var index = 1;
var expression = GetExpressionAtInitializer(declarator, index);
Console.WriteLine(expression);
//Examine 'expression' for more information on value at the second index
}
private static Roslyn.Compilers.CSharp.ExpressionSyntax GetExpressionAtInitializer(Roslyn.Compilers.CSharp.VariableDeclaratorSyntax declarator, int index)
{
var initializerExpression = declarator.Initializer.Value as Roslyn.Compilers.CSharp.InitializerExpressionSyntax;
var expression = initializerExpression.Expressions[index];
return expression;
}
您可以使用 VS 的快速监视窗口来查看语法树的层次结构。
如果您对其进行一些语义分析,您可能能够获得有关代码中符号的更有意义的信息。