我正在尝试做一些简单的事情:用泛型创建一个实例.我收到一个错误,说我无法创建实例,因为我没有new约束.但是,我在退货声明中确实有这个!有什么想法吗?
public IAction CreateAction<TA, TP>(ActionParamBase param)
where TA : IAction
where TP : ActionParamBase
{
Ensure.That(param).Is<TP>();
return new TA { Param = param as TP };
}
Run Code Online (Sandbox Code Playgroud)
您必须new()在TAtype参数上指定约束才能调用构造函数:
public IAction CreateAction<TA, TP>(ActionParamBase param)
where TA : IAction
, new()
where TP : ActionParamBase
{
...
}
Run Code Online (Sandbox Code Playgroud)
只有这样它才知道(和强制)TA具有无参数构造函数.
(只是一个小注释:它只适用于无参数构造函数,而不适用于具有参数的构造函数.在这种情况下,您可以使用初始化程序)