C#split按实现划分的接口列表

前端之家收集整理的这篇文章主要介绍了C#split按实现划分的接口列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要拆分List< IInterface>获取IInterface的具体实现列表.
我怎样才能以最佳方式做到这一点?
public interface IPet { }
        public class Dog :IPet { }
        public class Cat : IPet { }
        public class Parrot : IPet { }

        public void Act()
        {
            var lst = new List<IPet>() {new Dog(),new Cat(),new Parrot()};
            // I need to get three lists that hold each implementation 
            // of IPet: List<Dog>,List<Cat>,List<Parrot>
        }

解决方法

您可以按类型执行GroupBy:
var grouped = lst.GroupBy(i => i.GetType()).Select(g => g.ToList()).ToList()

如果你想要一个字典,你可以这样做:

var grouped = lst.GroupBy(i => i.GetType()).ToDictionary(g => g.Key,g => g.ToList());
var dogList = grouped[typeof(Dog)];

或者蒂姆在评论中提出:

var grouped = lst.ToLookup(i => i.GetType());

猜你在找的C&C++相关文章