1

我有下面的代码,我需要一些帮助来修复。我想要的是将一个字符串表达式和一个字符串 [] 参数传递给此方法,并将表达式编译并应用于列表中的各个项目。

  public static IEnumerable<T> ForEach<T>(this IList<T> source, string expression, params object[] values)
  {
       if (source == null) throw new ArgumentNullException("source");
       if (expression == null) throw new ArgumentNullException("expression");
       var enumerableList = source.AsEnumerable<T>();

        return (from T item in source
            select (T) DynamicLambdaExpression.ParseLambda(item.GetType(), typeof(T), expression, values).Compile().DynamicInvoke(item));


  }

照原样,可能正在应用表达式,但每个操作返回的类型不是我期望的类型。不确定,因为我在运行它时遇到异常。

<IfTrue Expression="it.UID = @0 + it.index.ToString(@1)" Parameters="000000 D6"/>

我不断收到的错误消息说

System.Linq.Dynamic.ParseException 发生 HResult=-2146233088 消息=“IProductDetail”类型的表达式预期源=动态位置=0 StackTrace:在 System.Linq.Dynamic.ExpressionParser.Parse(类型 resultType)

因此,我将不胜感激在修复代码方面的任何帮助,并请解释我做错了什么。提前致谢。

4

1 回答 1

0

如果您直接从 Xml 读取数据并将其传递给您的函数而不进行修改,那么您只传递了一个参数。值数组如下所示:

values[0] : "000000 D6"

您可能需要根据不可能作为实际值存在的已知分隔符(例如管道)拆分 xml 中参数的值,如下所示"000000|D6":然后,您可以使用 split: 将其更改为参数数组var parms = string.Split(values, "|");。(您可以为此使用空格字符,但这可能会在以后造成更多麻烦,具体取决于您在此属性中的值。)

因此,如果您只将一项传递给您的values参数,那么values[1]将会null(或更准确地说,不存在),这可能会导致您看到的异常。如果不查看其余代码,很难知道实际发生了什么,但希望这将为您指明正确的方向。

于 2013-10-11T18:34:01.407 回答