通用方法将新T添加到T列表中

DBH*_*BHC -3 c# generics generic-constraints

我试图将一个通用列表传递给一个函数,该函数将一个新项添加到列表中.我有以下剥离示例:

   private void SetBayNumb<T>(ObservedList<T> bayList) where T : IBaySpec, new()
   {
     var bay = new T();
     bayList.Add(bay);
   }
Run Code Online (Sandbox Code Playgroud)

调用它的方法有这个错误:

T' must have a public parameterless constructor in order to use it as parameter泛型类型或方法中的类型T'

我想做的是什么?我觉得它必须是因为编译器不应该关心它是什么类型的列表 - 它只需要调用public,无参数构造函数并将新实例添加到传入的现有列表中.

我猜测问题是接口不保证它的实现者将有一个公共构造函数,但即使我给它一个具体的类我得到这个错误:

类型T' must be convertible toBayClass',以便在泛型类型或方法中将其用作参数"T"

非常感谢任何指针.

Aas*_*set 5

投诉不是关于名单,而是关于T.如果你有一个ObservedList<MyClass>并传递给它SetBayNumb(),MyClass必须实现IBaySpec它必须有一个无参数构造函数:public MyClass() { ... }.为什么?因为那是where T : IBaySpec, new()说的.如果删除该where子句,错误将消失,但您将无法再说new T().