首页 > 解决方案 > 将接口用作具有新约束的泛型类型

问题描述

在 C# 中,我定义了一个接口,如下所示:

public interface IClassA
{
    IEnumerable<T> Search<T>()
        where T : new();
}

public interface IClassB
{
    ...
}

如果我做

public DoSomething(IClassA a)
{
    // Error: IClassB must be a non-abstract type with a public parameterless constructor.
    var result = a.Search<IClassB>();
}

我该如何解决这个问题,以便我可以在IClassA.Search中将 IClassB作为泛型类型传递?或者这是不可能的?

标签: c#

解决方案


您在方法中添加了约束new(),这意味着泛型方法声明中的类型参数必须具有公共无参数构造函数。接口不能有构造函数。删除where T: new()约束。


推荐阅读