2
我嘗試使用Roslyn獲取數組值。例如,如果我有一個C#代碼是這樣的:Roslyn:獲取數組值
int[] arrInt = {10, 20, 30, 40, 50};
然後我怎樣才能獲得該信息arrInt [0]是10,arrInt [1]爲20,依此類推。
我嘗試使用Roslyn獲取數組值。例如,如果我有一個C#代碼是這樣的:Roslyn:獲取數組值
int[] arrInt = {10, 20, 30, 40, 50};
然後我怎樣才能獲得該信息arrInt [0]是10,arrInt [1]爲20,依此類推。
我鼓勵你到check the documentation,FAQ and samples,尤其是語法和語義分析部分。
這裏的解決方案:
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的快速監視窗口查看語法樹的層次結構。
如果您對代碼中的符號應用了某些語義分析,您可能可以獲得關於代碼中符號的更多有意義的信息。
嗨Tenor,非常感謝您的答覆。它確實有幫助。歡呼聲 –
不客氣:) – tenor
您可能希望將'使用Roslyn.Compilers.CSharp;'添加到您的代碼中,以便每次使用該名稱空間中的類型時都不必重複說明。 – svick