【发布时间】:2023-04-11 12:52:02
【问题描述】:
我将从代码开始
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;
编译通过但在运行时出错。即使 typeAs 不为 null,typeAs2 也会返回 null。
【问题讨论】:
-
您在 TypeACollection 中是否有值得创建新类而不是仅使用 LocDataCollection
的特定行为? -
是的,TypeACollection 中还有其他功能。
标签: .net generics collections