Dynamic Expression API(Dynamic.cs).net 3.5で式を正しく解析しない

dynamic expression lambda linq tree
Dynamic Expression API(Dynamic.cs).net 3.5で式を正しく解析しない

このAPIを.net 3.5で動作させるのに問題があります(4.0では正常に動作します)。 基本的に私は次のコードを持っています

  List parameters = new List();
  parameters.Add(Expression.Parameter(typeof(double), "R0C6"));
  parameters.Add(Expression.Parameter(typeof(double), "R0C7"));
  parameters.Add(Expression.Parameter(typeof(double), "R0C8"));
  parameters.Add(Expression.Parameter(typeof(double), "R0C9"));
  parameters.Add(Expression.Parameter(typeof(double), "R0C10"));
  parameters.Add(Expression.Parameter(typeof(double), "R0C11"));
  parameters.Add(Expression.Parameter(typeof(double), "R0C12"));

  LambdaExpression e = DynamicExpressionBuilder.ParseLambda(
              parameters.ToArray(), typeof(double), "R0C6 + R0C7 + R0C8 + R0C9 + R0C10 + R0C11 + R0C12");

  var result = e.Compile().DynamicInvoke(1, 1, 1, 1, 1, 1, 1);
  Console.WriteLine(result);

このコードを実行すると、ArgumentExceptionが発生します。 .NET 3.5には、4つ以上のパラメーターを取るFuncデリゲートがないためです。 Dynamic.csの変更を提案して、3.5で動作するコードを取得できるようにできますか?

  0  0


ベストアンサー

はい、それは一つの選択肢です。 ここに私のために働いたコードがあります

        List parameters = new List();
        parameters.Add(Expression.Parameter(typeof(Holder), "H"));


        LambdaExpression e = DynamicExpressionBuilder.ParseLambda(parameters.ToArray(), typeof(double), "H.R0C6 + H.R0C7 + H.R0C8 + H.R0C9 + H.R0C10 + H.R0C11 + H.R0C12");

        var result = e.Compile().DynamicInvoke(new Holder { R0C6 = 1, R0C7 = 1, R0C8 = 1, R0C9 = 1, R0C10 = 1, R0C11 = 1, R0C12 = 1 });
        Console.WriteLine(result);

しかし、確かに私の元の実装を達成するより良い方法があるはずです。

1


すべてのdoubleを、値のフィールドまたはプロパティを含む単一のパラメーターオブジェクトに結合できない理由はありますか? 次に、式のFuncに必要なパラメーターは1つだけです。

0


タイトルとURLをコピーしました