C# 转换列表的最佳方式是什么<;MyObject>;列出<;IMyInterface>;?

C# 转换列表的最佳方式是什么<;MyObject>;列出<;IMyInterface>;?,c#,collections,interface,C#,Collections,Interface,我有一个物品清单。让我们把它们称为MyObject,我需要将它们转换为IMyInterface列表,因为我想将其他东西添加到列表中,这些东西不是MyObject,而是实现我的接口。我试过了,但没用 List<IMyInterface> myList = myObjectList; //myObjectList is a List<MyObject> List myList=myObjectList//myObjectList是一个列表 有什么建议吗?我是否需要预先

我有一个物品清单。让我们把它们称为MyObject,我需要将它们转换为IMyInterface列表,因为我想将其他东西添加到列表中,这些东西不是MyObject,而是实现我的接口。我试过了,但没用

 List<IMyInterface> myList = myObjectList;  //myObjectList is a List<MyObject>
List myList=myObjectList//myObjectList是一个列表
有什么建议吗?我是否需要预先投射阵列中的每个项目?

试试这个

List<IMyInterface> l = myList.OfType<IMyInterface>().ToList();
List l=myList.OfType().ToList();
myList.Cast().ToList()

OfType
也可以工作,但它是一个过滤器,而不是每个项目的转换。

将n列表转换为接口列表非常简单,您所要做的就是将其添加到
myobjectlist
的末尾, 您还可以使用mylistobject.Cast`

这里有一些有用的链接

链接1 链接2 链接3

OffType转换的完整代码

List<IMyInteface>1 = mylistobject.OfType(IMyInterface>().ToList() ; 
您也可以使用此代码

List<target> targetList = new List<target>(originalList.Cast<target>());
List targetList=新列表(originalList.Cast());

Hop这回答了你的问题

你需要
.ToList()
最后:)从语义上讲,使用
Cast()
会更正确。这实际上是一个新的列表造成了op的问题吗?
 List<IMyInteface>1 = mylistobject.Cast(IMyInterface>().ToList() ; 
var targetList = origList
  .Select(x => new TargetType() { SomeValue = x.SomeValue })
  .ToList();
List<target> targetList = new List<target>(originalList.Cast<target>());