.net 通用集合不工作

.net 通用集合不工作,.net,generics,collections,.net,Generics,Collections,我将从代码开始 class LocData { public virtual TypeA Copy () { ... } ... } class LocDataCollection<T> : List<T> where T: LocData { public LocDataCollection<T> Copy() { LocDataCollection<T> locDatas = new Loc

我将从代码开始

class LocData 
{
    public virtual TypeA Copy () { ... }
    ...
}

class LocDataCollection<T> : List<T> where T: LocData
{
    public LocDataCollection<T> Copy() 
    {
        LocDataCollection<T> locDatas = new LocDataCollection<T>();
        foreach (T locData in this)
        {
            T locData2 = locData.Copy() as T;
            locDatas.Add(locData2);
        }
        return locDatas;
    }
  ...
}
编译消息:

“无法将类型'LocDataCollection'隐式转换为'TypeACollection'。存在显式转换(是否缺少强制转换?)”

我得换成

TypeACollection typeAs2 = typeAs.Copy() as TypeACollection;
编译过程但在运行时出错。typeAs2返回为null,即使typeAs不为null

typeAs.Copy()
返回一个
LocDataCollection
。但是您不能将其中一个分配给
TypeACollection
,因为
TypeACollection
LocDataCollection
派生得更多

您也许可以通过使复制方法接收
LocDataCollection
来解决此问题:

当然,这不会复制任何
TypeACollection
特定的内容,除非您添加了覆盖

但我对您的问题了解不够,无法确信这是一个合适的解决方案。

typeAs.Copy()
返回一个
LocDataCollection
。但是您不能将其中一个分配给
TypeACollection
,因为
TypeACollection
LocDataCollection
派生得更多

您也许可以通过使复制方法接收
LocDataCollection
来解决此问题:

当然,这不会复制任何
TypeACollection
特定的内容,除非您添加了覆盖


但我对您的问题了解不够,无法确信这是一个合适的解决方案。

您在TypeACollection中是否有值得创建一个新类而不仅仅是使用LocDataCollection的特定行为?是的,TypeACollection中还有其他函数。TypeACollection中是否有值得创建一个新类而不仅仅是使用LocDataCollection的特定行为?是的,TypeACollection中还有其他函数。
TypeACollection typeAs = new TypeACollection();
...
TypeACollection typeAs2 = typeAs.Copy();
TypeACollection typeAs2 = typeAs.Copy() as TypeACollection;
class LocDataCollection<T> : List<T> where T: LocData
{
    public void CopyTo(LocDataCollection<T> dest) 
    {
        ....
    }
}
TypeACollection typeAs = new TypeACollection();
TypeACollection typeAs2 = new TypeACollection();
typeAs.CopyTo(typeAs2);