作者:手机用户2502868585 | 来源:互联网 | 2023-09-15 08:15
如何使用ParallelEnumerable.AsParallel包装NewArrayExpression?
例如,我有Expression代表下一个代码:
str_middle_out
我想要得到的结果:
var data = new int {1,2,3,4,5};
我尝试使用ExpressionVisitor和VisitNewArray方法:
var data = new int {1,5}.AsParallel();
但是不知道如何纠正“ ” node.Expressions 这个 Expression.Call
谢谢您的任何建议!
这样做会把表达式类型T[]
更改为ParallelQuery
,这可能会引起问题。
但是回答您的具体问题。让我们重写您的示例
var data = new int[] {1,2,3,4,5}.AsParallel();
如下
var newArray = new int[] { 1,5 };
var data = newArray.AsParallel();
现在考虑到AsParallel
是通用静态扩展方法,删除编译器糖后的实际调用是
var data = ParallelEnumerable.AsParallel(newArray);
换句话说,调用通用静态方法,将数组元素类型作为通用类型参数,将new
数组表达式作为参数。例如
protected override Expression VisitNewArray(NewArrayExpression node)
{
var asParallel = Expression.Call(
typeof(ParallelEnumerable),nameof(ParallelEnumerable.AsParallel),new [] { node.Type.GetElementType() },node
);
return asParallel;
}