2016-01-15 2 views
1

Есть ли способ скомпилировать следующую строку в C# string linqExpression = "(seq) => seq.Average()" с использованием roslyn?Компиляция выражения Linq с использованием Roslyn

Вместо того, чтобы сделать это:

SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@" using System; 
    using System.Linq; 
    public class RoslynLinq 
    { 
     public void Execute(int[] a) 
     { 
      Func<int[], double> func = (seq) => seq.Average(); 
      Console.WriteLine(func(a)); 
     } 
    }"); 

Могу ли я сделать:

SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText("Func<int[], double> func = (seq) => seq.Select((x)=>x).Average()"); 
+0

Да, так же, как вы компилируете любое другое выражение. – SLaks

+0

То, что я имел в виду, что, вместо того, чтобы сделать это: SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText (@» с использованием системы; использования System.Linq; общественного класс RoslynLinq { общественных недействительным Execute (INT [] а) { Func func = (seq) => seq.Average(); Console.WriteLine (func (a)); } } "); Можно ли: Синтаксис СинтаксисTree = CSharpSyntaxTree.ParseText ("Func func = (seq) => seq.Select ((x) => x) .Average()"); – Aman

ответ

1

Это звучит, как вы на самом деле просят, можно ли разобрать заявление без содержащего функции или класса.

Просто пройди SourceCodeKind.Script, и это будет работать нормально.

+0

Существует также ['SyntaxFactory.ParseStatement()'] (http://source.roslyn.io/#Microsoft.CodeAnalysis.CSharp/Syntax/SyntaxFactory.cs,41bba2b7f36dcf28) – JoshVarty

Смежные вопросы