基于Type强制执行泛型委托参数

时间:2014-06-04 19:54:40

标签: c# .net generics

我在类中创建一个类似的成员:

Dictionary<Type, Func<TContract, Task>> ProcessorDictionary = new Dictionary<Type, Func<TContract, Task>>();

在上面的词典中,我想维护特定类型与其相关处理器之间的绑定。我想强制执行一个约束,当你向这个字典添加一个条目时,TContract应该是&#34; Type&#34;的一个实例。例如:

Func<MessageContract,Task> func = ...
ProcessorDictionary.Add(typeof(MessageContract), func)

这可能吗?如果不是什么选择?

1 个答案:

答案 0 :(得分:3)

用类似于通用约束的东西来实现它是不可能的。你能做的是&#34;隐藏&#34;泛型方法背后的字典(支持类型约束)。

只需要一个字典为私有的类,并公开一般的方法:

private Dictionary<Type, Func<TContract, Task>> _processorDictionary = new Dictionary<Type, Func<TContract, Task>>();

public void AddEntry<TContract>(Func<TContract, Task> func)
{
    _processorDictionary[typeof(TContract)] = func;
}