我有一本字典-关键是System.Type。我不进一步限制字典条目;但是,该词典仅通过公共类接口公开。我在模仿事件系统。

System.Collections.Generic Dictionary看起来像:

private Dictionary<Type, HashSet<Func<T>>> _eventResponseMap;


公开字典的方法之一具有以下签名:

public bool RegisterEventResponse<T>(Type eventType, Func<T> function)


但是,我不希望类用户能够通过此签名将任何System.Type添加到字典中。有没有办法进一步限制Type参数?

我真正想要的是类似于(伪代码)的东西:

public bool RegisterEventResponse<T>(Type eventType, Func<T> function) where Type : ICustomEventType

最佳答案

为什么不更改方法的签名?

public bool RegisterEventResponse<TEvent, TReturn>(Func<TReturn> function)
    where TEvent: ICustomEventType
{
    _eventResponseMap[typeof(TEvent)] = function;
}


是的,您会丢失类型推断,但会获得类型安全性。代替编写RegisterEventResponse(typeof(CustomEvent), () => 1),您需要编写RegisterEventResponse<CustomEvent, int>(() => 1)

10-06 02:43