gpt4 book ai didi

c# - 动态函数映射

转载 作者:太空狗 更新时间:2023-10-30 01:08:44 25 4
gpt4 key购买 nike

我想定义以下两个函数:

void Map<T>(Func<T, string> mapper);

T Call<T>(string value);

Map 需要存储将字符串转换为类型 T 的结果的函数,以便在使用类型 T 和字符串调用“Call”函数时可以查找和调用适当的函数。

我在想 map 可以将函数存储在 Dictionary<Type, Func<object, string>> 类型的字典中然后 Call 可以转换为适当的类型,但我无法让它工作。有谁知道如何实现这一点?

最佳答案

Func 的第一个类型参数是输入,第二个是输出:Func<in T, out TResult> -- 所以你需要 Func<string, T> .

(MSDN 引用 here 使用了 Func<string, string> 有点烦人。)

此外,字典不能使用类型参数 T因为字典中的每个元素都是不同的。相反,使用 Func<T, TResult> 的父类(super class)这是Delegate .

这应该有效:

    Dictionary<Type, Delegate> dictionary = new Dictionary<Type, Delegate>();

public void Map<T>(Func<string, T> mapper)
{
dictionary[typeof(T)] = mapper;
}

public T Call<T>(string value)
{
var func = dictionary[typeof(T)] as Func<string, T>;
return func.Invoke(value);
}

关于c# - 动态函数映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8613035/

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