c# - 将接口用作具有新约束的泛型类型
问题描述
在 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作为泛型类型传递?或者这是不可能的?
解决方案
您在方法中添加了约束new(),这意味着泛型方法声明中的类型参数必须具有公共无参数构造函数。接口不能有构造函数。删除where T: new()
约束。
推荐阅读
- python - 如何通过 OMPython 在重新声明语句中修改组件的值
- javascript - 如何删除 d3.js 树中的初始转换
- python - 如何对日期列进行分组?
- flutter - 结合命名路由和 PageView
- ssis - SSIS文件任务系统将多个输入文件从不同的源路径复制到不同的目标路径
- mongodb - 如何在 mongo db 中使用另一个字段的值来投影字段?
- visual-studio-code - VScode在打字时短暂休息时自动跳转到下一页
- gitlab - Gitlab-ci - 管道因没有工作而失败
- sql-server - 如何在 Azure 门户中查找谁创建了 SQL Server?
- javascript - 反应.js | 这两个功能有什么不同?