gpt4 book ai didi

c# - 如何创建算法类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:43 25 4
gpt4 key购买 nike

假设我有两个数字序列,AB

如何创建一个对象来描述两个序列之间的关系?

例如:

A: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9...

B: 0, 2, 4, 6, 8, 10, 12, 14, 16, 18...

B = 2A

f() 关系是我们从AB 的方式。

但是给定两个任意序列,我如何构造f

此外,我怎样才能将 f 返回给调用方法,以便它可以直接将它用于任何数字? -- 可以使用 delegate 作为返回类型吗?

我有一个想法,但也许你可以给我建议:我可以使用装饰器模式来构建一个包含各种运算符和常量等的对象...然后只需生成代码即可。这很乱,我不想使用这种方法。


我不是在问如何找到 f,我可以做到。我在问如何建模 f

抱歉,如果所有内容都不清楚,我不知道还能怎么解释。

最佳答案

你可以使用 LINQ expression trees :

var x = Expression.Parameter(typeof(int), "x");
var body = Expression.Multiply(Expression.Constant(2), x);
var lambda = Expression.Lambda<Func<int, int>>(body, x);
var f = lambda.Compile();

或者(如果函数已知)

Expression<Func<int, int>> lambda = x => 2 * x;
var f = lambda.Compile();

或(没有表达式树)

Func<int, int> f = x => 2 * x;

用法:

var a = new int[] { 0, 1, 2, 3, 4, 5 };
var b = a.Select(f).ToArray();
// b == new int[] { 0, 2, 4, 6, 8, 10 };

参见:Expression Class

另请参阅:Expression Tree Basics

关于c# - 如何创建算法类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874036/

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