我有一个
List<Person> personlist;
如何转换为
IEnumerable<IPerson> iPersonList
Person实现IPerson接口
答案 0 :(得分:28)
如果您使用的是.NET 4.0或更高版本,则可以进行隐式转换:
IEnumerable<IPerson> iPersonList = personlist;
//or explicit:
var iPersonList = (IEnumerable<IPerson>)personlist;
这会在IEnumerable<out T>
中使用通用的逆转 - 即因为您只获得IEnumerable
的 out ,您可以隐式地将IEnumerable<T>
转换为{{1}如果IEnumerable<U>
。 (它也使用T : U
。)
否则,您必须使用LINQ:
来转换每个项目List<T> : IEnumerable<T>
答案 1 :(得分:4)
您可以使用IEnumerable.Cast
var iPersonList = personlist.Cast<IPerson>();
答案 2 :(得分: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
}