我将从代码
开始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;
}
...
}
和
class TypeA : LocData
{
public new TypeA Copy () { ... }
...
}
class TypeACollection : LocDataCollection<TypeA>
{
}
测试代码:
TypeACollection typeAs = new TypeACollection();
...
TypeACollection typeAs2 = typeAs.Copy();
编译消息:
“无法将类型'LocDataCollection'隐式转换为'TypeACollection'。存在显式转换(您是否错过了转换?)”
我必须改为
TypeACollection typeAs2 = typeAs.Copy() as TypeACollection;
编译传递但在运行时错误输出。 typeAs2返回null甚至typeAs不为null。
答案 0 :(得分:4)
typeAs.Copy()
返回LocDataCollection<TypeA>
。但是,您无法将其中一个分配给TypeACollection
,因为TypeACollection
的派生程度高于LocDataCollection<TypeA>
。
您可以通过使复制方法收到LocDataCollection<T>
:
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);
当然,这不会复制任何TypeACollection
特定内容,除非您添加了覆盖效果。
但我对你的问题不太了解,不能确信这是一个合适的解决方案。