我有一个
List<Person> personlist;
我怎样才能转换为
IEnumerable<IPerson> iPersonList
Person 实现 IPerson 接口
我有一个
List<Person> personlist;
我怎样才能转换为
IEnumerable<IPerson> iPersonList
Person 实现 IPerson 接口
如果您使用的是 .NET 4.0 或更高版本,则可以进行隐式转换:
IEnumerable<IPerson> iPersonList = personlist;
//or explicit:
var iPersonList = (IEnumerable<IPerson>)personlist;
这使用了泛型逆变IEnumerable<out T>
- 即因为您只能从 中得到一些东西,所以IEnumerable
您可以隐式转换IEnumerable<T>
为IEnumerable<U>
if T : U
。(它也使用那个List<T> : IEnumerable<T>
。)
否则,您必须使用 LINQ 转换每个项目:
var iPersonList = personlist.Cast<IPerson>();
您可以使用IEnumerable.Cast
var iPersonList = personlist.Cast<IPerson>();
从 .NET 4.0 开始,您可以传递List<Person>
给具有类型参数的方法,IEnumerable<IPerson>
而无需隐式或显式强制转换。
你可以这样做:
var people = new List<Person>();
// Add items to the list
ProcessPeople(people); // No casting required, implicit cast is done behind the scenes
private void ProcessPeople(IEnumerable<IPerson> people)
{
// Processing comes here
}