在课堂上,我会处理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);
甚至没有编译......
这样做的正确方法是什么?
答案 0 :(得分:8)
使用Linq:
Cast<>
Concat
返回一个枚举(思想linq的延迟执行),其中元素强制转换为目标类型,ToList
组合了两个枚举,return FirstList.Concat<IInterface>(SecondList).ToList();
将结果转换为列表(并实现了linq查询)。
正如@Evk亲切地注意到的,当从两种类型到输出类型的隐式转换(在你的情况下,你可以将你的两种类型转换为它们的公共接口)时,你可以完全跳过转换(尽管在那里如果需要显式指定连接类型,请按如下方式进行:
{{1}}