API динамических выражений (Dynamic.cs) Неправильный синтаксический анализ выражения в .net 3.5 - PullRequest
0 голосов
/ 08 июля 2010

У меня проблемы с работой этого API в .net 3.5 (нормально работает в 4.0).В основном у меня следующий код

  List<ParameterExpression> parameters = new List<ParameterExpression>();
  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 не имеет делегата Func, который принимает более 4 параметров.Может кто-нибудь предложить мне изменить в Dynamic.cs, чтобы я мог получить работающий код в 3.5?

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Да, это одна из альтернатив.Вот код, который работал для меня

        List<ParameterExpression> parameters = new List<ParameterExpression>();
        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);

Но, безусловно, должен быть лучший способ достижения моей первоначальной реализации.

0 голосов
/ 09 июля 2010

Есть ли причина, по которой вы не можете объединить все двойные числа в один объект параметра, который содержит поля или свойства для значений?Тогда вам понадобится только один параметр в вашем Func для выражения.

...