[英]Properties, methods, lambda expressions used in the code
我有一個代碼:
using System.Linq.Expressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Expression<del> myET = x => x.Age; //for example in ASP.NET MVC forms
Person.Name = "vitia"
Person.Move();
}
}
}
我想知道如何使用Roslyn.NET可以“拉”並向控制台寫入代碼中使用的所有方法,屬性和lambda。 現在我坐在這幾個小時,我什么都想不到。 我試圖在這里使用MemberAccesExpressionSyntax,但我並沒有真的出來。 你能舉一些這樣做的例子嗎? 使用此代碼,屏幕將放置控制台:
x.Age Name Move
這是您正在尋找的那種查詢:
var expressionNodes = syntaxTree.
GetRoot().
DescendantNodes().Where(n => n.Kind == SyntaxKind.[YourSyntaxKind]);
以下是完整的代碼示例。 您應該能夠將其粘貼到C#控制台應用程序中。
我退出了:
我將為自己留下一個練習,以取出你需要的其余部分。
private static void StackOverflowTest()
{
var syntaxTree = SyntaxTree.ParseText(@"
using System.Linq.Expressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Expression<del> myET = x => x.Age; //for example in ASP.NET MVC forms
Person.Name = ""vitia""
Person.Move();
}
}
}");
EmitStatement(syntaxTree, SyntaxKind.ParenthesizedLambdaExpression);
EmitStatement(syntaxTree, SyntaxKind.SimpleLambdaExpression);
EmitStatement(syntaxTree, SyntaxKind.MethodDeclaration);
}
private static void EmitStatement(SyntaxTree syntaxTree, SyntaxKind sk)
{
var expressionNodes = syntaxTree.
GetRoot().
DescendantNodes().Where(n => n.Kind == sk);
foreach (var expressionNode in expressionNodes)
{
Console.WriteLine(expressionNode.ToString());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.