gpt4 book ai didi

c# - 在 C# 中动态生成委托(delegate)类型

转载 作者:太空狗 更新时间:2023-10-29 22:25:09 27 4
gpt4 key购买 nike

我们有一个要求,我们需要动态生成委托(delegate)类型。我们需要在给定输入参数和输出的情况下生成委托(delegate)。输入和输出都是简单类型。

例如,我们需要生成

int Del(int, int, int, string)

int Del2(int, int, string, int)

关于如何开始这方面的任何指示都会非常有帮助。

我们需要解析表示为 xml 的公式。

例如,我们将 (a + b) 表示为

<ADD>
<param type="decimal">A</parameter>
<param type="decimal">B</parameter>
</ADD>

我们现在希望将其公开为 Func<decimal, decimal, decimal> .我们当然希望在 xml 中允许嵌套节点,例如:

(a + b) + (a - b  * (c - d)))

我们想使用表达式树和 Expression.Compile 来做到这一点.

欢迎就此方法的可行性提出建议。

最佳答案

最简单的方法是使用现有的 Func委托(delegate)家庭。

使用 typeof(Func<,,,,>).MakeGenericType(...) .例如,对于您的 int Del2(int, int, string, int)输入:

using System;

class Test
{
static void Main()
{
Type func = typeof(Func<,,,,>);
Type generic = func.MakeGenericType
(typeof(int), typeof(int), typeof(string),
typeof(int), typeof(int));
Console.WriteLine(generic);
}
}

如果您真的,真的需要创建一个真正的新类型,也许您可​​以提供更多背景信息以帮助我们更好地帮助您。

编辑:正如 Olsin 所说,Func类型是 .NET 3.5 的一部分 - 但如果您想在 .NET 2.0 中使用它们,您只需自己声明它们,如下所示:

public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T arg);
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
public delegate TResult Func<T1, T2, T3, TResult>
(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<T1, T2, T3, T4, TResult>
(T1 arg1, T2 arg2, T3 arg3, T4 arg4);

如果 4 个参数对您来说不够,您当然可以添加更多。

关于c# - 在 C# 中动态生成委托(delegate)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773099/

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