我需要转换List< Base>对象到列表< T>对象,其中T是从Base派生的类型之一,我知道这是肯定的。但是编译器说:
"无法转换为' Base'到''"
一些代码:
var rObj = JsonConvert.DeserializeObject<RootObject>(json);
List<T> list = new List<T>();
var ent = rObj.Entities; // Entities is List<Base>
foreach (var i in ent)
list.Add(i); // here I know that each i is a Base descendent, but the compiler reclams
我怎么能得到这个?如何从List恢复派生实例,因为我在此运行时才有T信息?
谢谢!
答案 0 :(得分:0)
定义List<Base>
并不表示列表中的任何项目都来自Base
。列表强制执行的唯一内容是其项目为Base
或其派生类。它不强制任何项是继承的类,也不是任何特定的继承类。 (您知道列表包含的类型,但编译器不包含。)
你可以这样做:
listOfT.AddRange(listOfBase.OfType<T>());
这会将T
类型的任何项目添加到List<T>
。
如果您确定列表中的每个项目都可以投放到T
,那么您可以
listOfT.AddRange(listOfBase.Cast<T>());