微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决没有从'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)
  {
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。