我知道可以将一个项目列表从一种类型转换为另一种类型(假设您的对象有一个公共静态显式运算符方法来执行转换),一次一个:
List<Y> ListOfY = new List<Y>();
foreach(X x in ListOfX)
ListOfY.Add((Y)x);
Run Code Online (Sandbox Code Playgroud)
但是不可能一次投出整个列表吗?例如,
ListOfY = (List<Y>)ListOfX;
Run Code Online (Sandbox Code Playgroud) 我为什么不能投出List<ObjBase>的List<Obj>?为什么以下不起作用:
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
return getSomeStuff() as List<Obj>;
}
private List<ObjBase> getSomeStuff()
{
return new List<ObjBase>();
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我必须这样做:
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
List<ObjBase> returnedList = getSomeStuff();
List<Obj> listToReturn = new List<Obj>(returnedList.Count);
foreach (ObjBase currentBaseObject in returnedList)
{
listToReturn.Add(currentBaseObject as Obj);
}
return …Run Code Online (Sandbox Code Playgroud) 我将json字符串反序列化List<ClassB>,现在我想List<ClassA>在将它从BindModel方法返回之前将其
强制转换.我需要进行转换,因为方法需要得到List<ClassA>.
为什么我在施法时遇到错误?毕竟,ClassB继承自ClassA.我该怎么办?
PS这个问题从这篇文章扩展而来.在行中new DataContractJsonSerializer(typeof(List<ClassB>));而不是List<ClassB>类型将在运行时构造.
public override object BindModel(...)
{
var serializer = new DataContractJsonSerializer(typeof(List<ClassB>));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("[{\"id\":\"1\",\"name\":\"name\"}]"));
var list = serializer.ReadObject(ms);
return (List<ClassA>)list;
}
[KnownType(typeof(ClassA))]
[DataContract]
public class ClassA
{
public ClassA();
}
[KnownType(typeof(ClassB))]
[DataContract]
public class ClassB : ClassA
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "name")]
public string CategoryName { get; …Run Code Online (Sandbox Code Playgroud)