动态 ForEach 循环以更新对象属性值
本文关键字:对象 属性 更新 ForEach 循环 动态 | 更新日期: 2023-09-27 18:34:53
我有下面的代码,我需要一些帮助来修复。我想要的是将字符串表达式和 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 消息=预期类型为"IProduct详细信息"的表达式 源=动态 位置=0 StackTrace: at System.Linq.Dynamic.ExpressionParser.Parse(Type resultType(
因此,我将不胜感激在修复代码方面的任何帮助,并请解释我做错了什么。 提前谢谢。

如果直接从 Xml 读取数据并将其传递给函数而不进行修改,则只传递一个参数。值数组如下所示:
values[0] : "000000 D6"
您可能需要根据不太可能作为实际值存在的已知分隔符(例如管道(在 xml 中拆分参数的值,如下所示:"000000|D6" .然后,您可以使用 split: var parms = string.Split(values, "|"); 将其更改为参数数组。(您可以为此使用空格字符,但这可能会导致以后出现更多麻烦,具体取决于此属性中的值。
因此,如果您只将一个项目传递给values参数,那么values[1]将被null(或者更准确地说,不存在(,这可能会导致您看到的异常。如果不查看代码的其余部分,很难知道实际发生了什么,但希望这会为您指明正确的方向。