如何在c#中将List <Interface>转换为List <Class>

Rav*_*G N 3 c# oop casting

我有一个定义为的接口

public interface IReaderInfo
{
    string Displayname {get;}
}
Run Code Online (Sandbox Code Playgroud)

以及实现该接口的类

public class ReaderInfo : IReaderInfo
{
    string DisplayName {get;}
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个返回List的函数

public List<ReaderInfo> GetReaders
{
     var readers = new List<ReaderInfo>();
     var Ireaders = someobject.Getreaders();// Returns the list of IReaderInfo.
     // Now i would like cast Ireaders as readers and return.
}
Run Code Online (Sandbox Code Playgroud)

我该如何施展它?

gre*_*k40 7

您必须使用已铸造的项目创建新列表:

var readers = Ireaders.Cast<ReaderInfo>().ToList();
Run Code Online (Sandbox Code Playgroud)

或者,如果有可能存在不兼容的IReaderInfo条目,并且您只想在结果中使用实际的ReaderInfo对象:

var readers = Ireaders.OfType<ReaderInfo>().ToList();
Run Code Online (Sandbox Code Playgroud)