簡體   English   中英

代碼中使用的屬性,方法,lambda表達式

[英]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#控制台應用程序中。

我退出了:

  • Parentesised Lambdas
  • 簡單的Lambdas
  • 方法

我將為自己留下一個練習,以取出你需要的其余部分。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM