返回派生自同一抽象类

时间:2017-01-15 15:40:33

标签: c# linq

我有一个抽象类,我们称之为Fruit。

有两个类来自Fruit,我们称之为Apple和Pear。

我有一个功能需要返回苹果和梨,比如说它们的有效期。

它看起来像这样:

public Fruit[] GetFruitByDate(string date){
Apple[] apples=/*Linq result*/;
Pear[] pears=/*Linq result*/;
return apples+pears;//what do I do here?
}

如何返回两个结果?

感谢。

2 个答案:

答案 0 :(得分:5)

如果你不得不继续施展你做错事,或者没有清楚地了解继承。因为Linq可以返回不同的类型,所以在= =不允许正确答案之后提出var并且没有实际代码的问题。我只是假设它返回并且某种类型的IEnnumarble。

public Fruit[] GetFruitByDate(string date){
List<Fruit> tResult = new List<Fruit>();
var apples=/*Linq result*/;
var pears=/*Linq result*/;
tResult.AddRange(apples);
tResult.AddRange(pears);
return tResult.ToArray();
}

答案 1 :(得分:4)

你可以这样做:

return apples.Cast<Fruit>().Concat(pears).ToArray();

同样Union代替Concat,但您可能不必担心比较这两种类型并对其进行重复数据删除。我听说将苹果与梨相比并不好(哦,等等,那是橙子)。

请务必包含此命名空间:

using System.Linq;

当你调用这个方法时,如果你需要回到子类成员,那么你需要对每个项目进行安全转换,或者通过调用.OfType<Apple>()将类型分开。