14

我有一个

List<Person> personlist; 

我怎样才能转换为

IEnumerable<IPerson> iPersonList

Person 实现 IPerson 接口

4

3 回答 3

28

如果您使用的是 .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>();
于 2013-02-25T16:44:09.527 回答
4

您可以使用IEnumerable.Cast

var iPersonList = personlist.Cast<IPerson>();
于 2013-02-25T16:42:21.610 回答
0

从 .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
}
于 2013-12-05T08:00:20.410 回答