Sha*_*dix 6 c# generics syntax
我在c#中有以下功能:
bool Handle<TCommandHandler, TModel>(TModel model) where TCommandHandler : ICommandHandler<TModel> {
// ...
_container.Resolve<TCommandHandler>();
// ...
}
Run Code Online (Sandbox Code Playgroud)
由于TModel是从功能参数明确我想一些方法调用函数时不指定其类型.理想情况下,我想称之为:
Handle<MyCommandHandler>(model);
Run Code Online (Sandbox Code Playgroud)
由于这可能是不可能的,我想出了以下内容:
HandleTemp<TModel> Handle<TModel>(TModel model) {
return new HandleTemp<TModel>(model);
}
public class HandleTemp<TModel> {
private TModel _model;
public HandleTemp(TModel model) { _model = model;}
public bool With<TCommandHandler>() where TCommandHandler : ICommandHandler<TModel> {
}
}
Run Code Online (Sandbox Code Playgroud)
所以我现在称之为:
Handle(model).With<MyCommandHandler>();
Run Code Online (Sandbox Code Playgroud)
还有其他可能吗?我的解决方案是否完全出错?
不,您的分析和解决方案看起来是正确的。事实上,泛型类型推断只能在“全有或全无”的基础上发挥作用。如果存在一些无法推断的通用参数,则必须明确说明所有参数。就我个人而言,我很喜欢一种方式来表达“你担心这些参数,我会告诉你这个”,但是......这不存在。
唯一的其他选择是添加一个人工的额外常规参数,以允许它推断 通用参数 - 有点令人讨厌。
另一种选择:挑战这里需要泛型的假设。例如,这可能只是一个Type实例吗?会:
bool Handle<TModel>(TModel model, Type type)...
...
Handle(model, typeof(MyCommandHandler));
Run Code Online (Sandbox Code Playgroud)
工作,例如?我无法直接回答这个问题,因为我不知道你的_container.Resolve<TCommandHandler>();方法的细节,是否可以调整为采用 aType而不是 a <T>。