【发布时间】:2015-02-05 22:00:14
【问题描述】:
我正在尝试将通用列表传递给将向列表添加新项目的函数。我有以下精简示例:
private void SetBayNumb<T>(ObservedList<T> bayList) where T : IBaySpec, new()
{
var bay = new T();
bayList.Add(bay);
}
调用它的方法有这个错误:
泛型类型或方法中的类型
T' must have a public parameterless constructor in order to use it as parameterT'
我正在尝试做的事情可能吗?我觉得它一定是因为编译器不应该关心它是什么类型的列表 - 它只需要调用公共的无参数构造函数并将新实例添加到传入的现有列表中。
我猜问题是接口不保证它的实现者会有一个公共构造函数,但是即使我给它一个具体的类我也会得到这个错误:
类型
T' must be convertible toBayClass' 为了使用它 作为泛型类型或方法中的参数“T”
非常感谢任何指点。
【问题讨论】:
-
您收到错误是因为您指定的类型不满足通用约束。
-
显示调用它的方法——它显然使用了
T的类型,它没有公共的无参数构造函数(请记住,构造函数不是继承的) -
阅读错误信息,它会告诉你到底出了什么问题..
-
@MethodMan 实际上我认为它不是因为涉及 2 个同名类型,而且很难区分它们......(我添加了显示错误的答案)。
标签: c# generics generic-constraints