问题描述
我正在尝试创建一个仅接受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)
{
}
}