为什么我无法从列表转换为列表?我有一个属于我的类型QuoteHeader的对象列表,我想将此列表作为对象列表传递给可以接受列表的对象。我的代码行是...Tools.MyMethod((List)MyListOfQuoteHeaders);但我在设计时收到以下错误...无法将类型“System.Collections.Generic.List”转换为“System.Collections.Generic.List”我是否需要对我的班级做任何事情才能允许这样做?我以为所有的类都是从对象继承的,所以我不明白为什么这行不通?这不合法的原因是因为它不安全。假设它是合法的:Listgiraffes=newList();列出动物=长颈鹿;//这是不合法的;假设是。animals.Add(新老虎());//把老虎放在动物列表中总是合法的,但“动物”实际上是长颈鹿列表;你不能把老虎列入长颈鹿名单。不幸的是,在C#中,这对于引用类型数组是合法的:Giraffe[]giraffes=newGiraffe[10];动物[]动物=长颈鹿;//合法的!但是很危险,因为...animals[0]=newTiger();//...这在运行时失败了!在C#4中,这在IEnumerable上是合法的,但在IList上不合法:Listgiraffes=newList();IEnumerable动物=长颈鹿;//在C#4中是合法的foreach(Animalanimalinanimals){}//每只长颈鹿都是动物,所以这是安全的,因为IEnumerable不公开任何接受T的方法。要解决你的问题,你可以:你可以't将List转换为List因为它实际上是您正在转换的List的一个实例,也是List本身。有一个扩展方法允许您执行此操作(MSDN参考):IEnumerablemyNewEnumerable=myEnumerable.Cast();此方法将尝试将一种类型列表的每个实例转换为另一种类型,并将它们添加到可枚举的新实例中。如果没有可以转换的实例,它将抛出异常。就系统而言,两种类型的列表只是不同的类型,所以就像说:AobjectOfTypeA;BobjectOfTypeB=(B)objectofTypeA;为了能够转换,可用类型之间必须有隐式或显式转换,但没有(除非你提供一个,你可以这样做)。您希望它能工作,因为List总是能够将任何类型保存在另一个列表中,但是当您从这些方面考虑它时,您就会明白为什么它不能。我确信有一个技术上更有能力的答案,但我认为这就是它的要点。您可能有兴趣阅读EricLippert关于协变和逆变的系列文章,因为这可能对您有所帮助。这个问题也可能有用Listx=someList.Select(f=>(MyClass)f).ToList();我假设你的意思是列表是相互继承的类型,或者可以从一种类型转换为另一种类型-在这种情况下尝试:Tools.MyMethod(MyListOfQuoteHeaders.Cast());感谢您的回复。我将解释我正在尝试做什么以及我提出的解决方案。我需要一种方法,我可以通过传入任何类型的对象列表来调用该方法,然后将该列表输出到XML。传递给这个方法的还有一个字符串,是一个系统文件结构路径位置,指向保存XML文件的位置。由于我的类和类型越来越多,我想避免编写多个方法来满足每种类型的类。我不确定我是否以正确的方式解决了这个问题,但它是解决我的问题的轻量级解决方案并且有效。如果有任何问题,或者如果有人有任何意见,请随意...所以...我的方法现在看起来像这样...publicstaticEnums.StatusWriteListToXML(stringoutputPath,ListinboundList){XmlSerializer(inboundList.GetType());使用(StreamWriterstreamWriter=System.IO.File.CreateText(outputPath)){xmlSerializer.Serialize(streamWriter,inboundList);}返回Enums.Status.Success;}catch(Exceptionex){返回枚举。状态。失败;}}...我的电话线说...WriteListToXML(@"C:XMLDocumentsoutputQuoteHeaders.xml",quoteHeadersList);就像我说的,它可能不是最简洁的解决方案,但它对我来说很管用,在现场效果很好。问题是编译时,编译器发出2个单独的类,1个用于List,1个用于List。它们基本上是两种不同的类型。这至少是泛型类型在.Net中的工作方式。假设这是.Net,您可以执行MyListOfQuoteHeaders.Cast(),基本上执行上述操作是C#学习教程:Whycan'tIcastfromListtoList?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——varobjects=newList();foreach(MyListOfQuoteHeaders中的varitem){objects.Add((object)item);}返回对象;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
