gpt4 book ai didi

c# - 使用数组类型作为参数表达式

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:20 25 4
gpt4 key购买 nike

声明参数表达式时,例如:

ParameterExpression x = Expression.Parameter(typeof(double),"x");

然后您可以使用此参数来构造 Lambda 表达式:

Expression Lowerbound = Expression.Constant(0.0,typeof(double));

Expression GreaterThanorEqual = Expression.GreaterThanOrEqual(x, Lowerbound);

Expression TestExpression = Expression.Lambda(GreaterThanorEqual,x);

Console.WriteLine(TestExpression.ToString());

// returns x => (x >= 0)

我现在需要一种方法来构造以下形式的表达式

x => (x[0] >= 0)
x => (x[1] >= 0)
x => (x[2] >= 0)
... et cetera

但是,我找不到定义参数的方法

Expression.Parameter(typeof(double[]),"x");

数组作为一个参数

然后

Expression.Parameter(typeof(double),"x["+i+"]");

作为另一个

有没有办法定义一个 Typedouble[] 的参数?

最佳答案

为了在表达式期间访问数组,请使用 Expression.ArrayIndex。这需要两个参数:1) 从中获取项目的数组,2) 传递到数组中的索引。

下面的代码应该将表达式编译成一个委托(delegate),它采用double[] 数组和int 索引来执行x => x [i] >= 0 表达式。

var arrayParam = Expression.Parameter(typeof(double[]), "x");
var indexParam = Expression.Parameter(typeof(int), "i");

var left = Expression.ArrayIndex(arrayParam, indexParam);
var right = Expression.Constant(0.0, typeof(double));

var body = Expression.GreaterThanOrEqual(left, right);

// Create and compile a lambda expression into a delegate to perform:
// x => x[i] >= 0
var func = Expression.Lambda<Func<double[], int, bool>>(body, arrayParam, indexParam)
.Compile();

double[] data = new double[] { -2.0, -1.0, 0.0, 1.0, 2.0, 3.0 };

for (int i = 0; i < data.Length; i++)
{
var d = data[i];
var x = func(data, i);
Console.WriteLine($"i: {d} => {x}");
}

关于c# - 使用数组类型作为参数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com