如何使用泛型创建实例?

Nos*_*mus 0 c# generics

我正在尝试做一些简单的事情:用泛型创建一个实例.我收到一个错误,说我无法创建实例,因为我没有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)

Pat*_*man 5

您必须new()在TAtype参数上指定约束才能调用构造函数:

public IAction CreateAction<TA, TP>(ActionParamBase param)
        where TA : IAction
                 , new()
        where TP : ActionParamBase
    {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

只有这样它才知道(和强制)TA具有无参数构造函数.

(只是一个小注释:它只适用于无参数构造函数,而不适用于具有参数的构造函数.在这种情况下,您可以使用初始化程序)