我有以下代码,我需要一些帮助修复。我想要的是将String表达式和String []参数传递给此方法,并将表达式编译并应用于列表中的各个项目。
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(TypeTypeType)
所以,我很感激任何帮助修复代码,并解释我做错了。提前致谢。
答案 0 :(得分:0)
如果您直接从Xml读取数据并将其传递给您的函数而不进行修改,那么您只需传递一个参数。 values数组看起来像这样:
values[0] : "000000 D6"
您可能需要根据不太可能作为实际值存在的已知分隔符(例如管道)在xml中拆分参数的值,如:"000000|D6"
。然后,您可以使用split:var parms = string.Split(values, "|");
将其更改为参数数组。 (你可以使用空格字符,但这可能会在以后导致更多麻烦,具体取决于您在此属性中的值。)
因此,如果您只将一个项目传入values
参数,则values[1]
将为null
(或更准确地说,不存在),这可能造成你所看到的例外。在没有看到其余代码的情况下很难知道实际发生了什么,但希望这会指出你正确的方向。