合并实现相同接口的两个类列表

时间:2017-10-10 15:00:51

标签: c# list interface

在课堂上,我会处理IInterface

的列表

我希望以一种单独的方式处理这两种可能的实现,因此:

public List<IInterface> Process(List<IInterface> InterfaceList)
{
    List<FirstImplementation> FirstList = FirstProcess(InterfaceList.OfType<FirstImplementation>.ToList());

    List<SecondImplementation> SecondList = SecondProcess(InterfaceList.OfType<SecondImplementation>.ToList());

   return new List<IInterface> {
    FirstList,
    SecondList
};

}

我想返回List<IInterface>,与输入相同,但事实证明它比预期更难

   return new List<IInterface> {
    FirstList,
    SecondList
};

编译但在运行时抛出InvalidCastException,

return new List<IInterface>.AddRange(FirstList).AddRange(SecondList);

甚至没有编译......

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:8)

使用Linq:

Cast<>

Concat返回一个枚举(思想linq的延迟执行),其中元素强制转换为目标类型,ToList组合了两个枚举,return FirstList.Concat<IInterface>(SecondList).ToList(); 将结果转换为列表(并实现了linq查询)。

正如@Evk亲切地注意到的,当从两种类型到输出类型的隐式转换(在你的情况下,你可以将你的两种类型转换为它们的公共接口)时,你可以完全跳过转换(尽管在那里如果需要显式指定连接类型,请按如下方式进行:

{{1}}