相关疑难解决方法(0)

从List <X>转换为List <Y>的语法较短?

我知道可以将一个项目列表从一种类型转换为另一种类型(假设您的对象有一个公共静态显式运算符方法来执行转换),一次一个:

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)

c# ienumerable casting list

216
推荐指数
5
解决办法
15万
查看次数

C#将List <ObjBase>转换为List <Obj>

我为什么不能投出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)

c# generics inheritance casting list

26
推荐指数
3
解决办法
6万
查看次数

当ClassB从ClassA继承时,如何将List <ClassB>转换为List <ClassA>?

我将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)

c# casting c#-4.0

10
推荐指数
2
解决办法
4924
查看次数

标签 统计

c# ×3

casting ×3

list ×2

c#-4.0 ×1

generics ×1

ienumerable ×1

inheritance ×1