使用linq从多个列表中执行对象的方法

时间:2013-11-26 09:22:56

标签: c# linq join

假设我有一些类实现了一些接口

public class A : I
{
    public void DoSomething()
    {
        // Some implementation
    }
}

public class B : I
{
    public void DoSomething()
    {
        // Some other implementation
    }
}

public interface I
{
    void DoSomething();
}

每个班级的列表

var listA = new List<A>();
var listB = new List<B>();

除了为每个列表分别执行DoSomething之外,还有其他方法可以执行foreach吗?如果是这样,那么最好的方法是什么(最好参考性能和内存使用方式)呢?

3 个答案:

答案 0 :(得分:4)

试试这个:

foreach(var item in listA.OfType<I>().Concat(listB.OfType<I>()))
    item.DoSomething();

答案 1 :(得分:1)

有一个:

var list = new List<I>();

并添加到它:

list.Add(new A());
list.Add(new B());

然后:

list.ForEach(x=>x.DoSomething());

您可以这样做,因为AB共享公共接口I

答案 2 :(得分:0)

King King的答案的简短形式

listA.Concat(listB.OfType<I>()).ToList().ForEach(a=>a.DoSomething());