热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用AsParallel进行C#包装数组初始化表达式树

如何使用ParallelEnumerable.AsParallel包装NewArrayExpression?例如,我有Expression代表下一个

如何使用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;
}

推荐阅读
author-avatar
手机用户2502868585
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有