没有从'List <QSO>'到'List <List <QSO >>'的隐式引用转换

问题描述

我正在尝试创建一个仅接受List<T>

的通用类
public class MyTables<T> where T : List<T>
{
   public MyTables(T list)
  {
  }
}

尝试实例化它时,编译器抱怨

var mt = new MyTables<List<QSO>>(Log.QSOs);
// Log.QSOs is an object property defined as 
// public List<QSO> QSOs { get; set; }

这是错误

Error   CS0311  The type 'List<QSO>' cannot be used as type parameter 'T' 
in the generic type or method 'MyTables<T>'. 
There is no implicit reference conversion from
'List<QSO>' to 'List<List<QSO>>'

为什么要期待'List<List<QSO>>'而不是'List<QSO>'?

解决方法

通用参数为T,您已将其约束为List<T>。无论您提供什么作为通用参数,都必须是其自身的列表,这大概不是您想要的!

这是一种可以满足您当前约束的类型:

class MyTable : List<MyTable>
{ }

您可能想改成这样的类:

public class MyTables<T>
{
  public MyTables(List<T> list)
  {
  }
}