【问题标题】:Compile Linq Expression using Roslyn使用 Roslyn 编译 Linq 表达式
【发布时间】:2017-07-18 20:58:02
【问题描述】:

有没有办法在 C# 中编译以下字符串 string linqExpression = "(seq) => seq.Average()" 使用 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()");

【问题讨论】:

  • 是的,与编译任何其他表达式的方式相同。
  • 我的意思是,而不是这样做: SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@" using System; using System.Linq; public class RoslynLinq { public void Execute(int[] a) { Func func = (seq) => seq.Average(); Console.WriteLine(func(a)); } }");我可以这样做:SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(“Func func = (seq) => seq.Select((x)=>x).Average()”);

标签: roslyn linq-expressions


【解决方案1】:

听起来您实际上是在问是否可以解析没有包含函数或类的语句。

只需传递SourceCodeKind.Script 即可。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多