Mik*_*keb 4 c# generics functional-programming
我想定义以下两个函数:
void Map<T>(Func<T, string> mapper);
T Call<T>(string value);
Run Code Online (Sandbox Code Playgroud)
Map需要存储将字符串转换为类型T的结果的函数,以便在使用类型T和字符串调用"调用"函数时,可以查找并调用相应的函数.
我在想地图可以将函数存储在类型字典中Dictionary<Type, Func<object, string>>,然后调用可以将类型转换为适当的类型,但我无法使其工作.有谁知道如何实现这一目标?
第一个类型的参数Func是输入,第二个是输出:Func<in T, out TResult>- 所以你需要Func<string, T>.
(这里的MSDN引用使用Func<string, string>了令人讨厌的公平位.)
此外,字典不能使用类型参数T,因为字典中的每个元素都不同.相反,使用超类的Func<T, TResult>是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);
}
Run Code Online (Sandbox Code Playgroud)