如何使用泛型创建实例

本文关键字:实例 创建 泛型 何使用 | 更新日期: 2023-09-27 18:05:39

我想做一些简单的事情:创建一个泛型实例。我得到一个错误,说我不能创建一个实例,因为我没有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 };
        }

如何使用泛型创建实例

您必须在TA类型参数上指定new()约束,以便能够调用构造函数:

public IAction CreateAction<TA, TP>(ActionParamBase param)
        where TA : IAction
                 , new()
        where TP : ActionParamBase
    {
        ...
    }

只有这样它才知道(并强制)TA有一个无参数的构造函数。

(只是一个小提示:它只适用于无参数构造函数,不适用于有参数的构造函数。在本例中,您可以使用初始化式)

这意味着在TA部分的约束中有new。参考这篇文章,然后看看下面的代码:将参数传递给模板类型为

的c#泛型new()
public IAction CreateAction<TA, TP>(ActionParamBase param)
        where TA : IAction, new()
        where TP : ActionParamBase
    {
        Ensure.That(param).Is<TP>();
        return new TA { Param = param as TP };
    }