c#中的多态返回类型

时间:2013-08-22 13:39:19

标签: c#

我有一个目前原型为:

的功能
List<object> get_object_list(byte object_type, object_void_delegate get_one_specific_type_object)
{}

由于获取元素列表的逻辑对于我所拥有的所有类型都是相同的,但是获取一个元素的逻辑从一种类型到另一种类型是不同的,我希望有一个函数来获取所有类型的list(get_object_list())。

例如类型为Car我会打电话:

List<Car> cars_list = (List<Car>) get_object_list (CAR , get_one_car);

现在的问题是我的无效转换有c编译错误: 无法将List<object>转换为List<Car>

无论如何要解决它?

更新 的 一些澄清。 get_object_list()位于客户端组件中,它从网络资源(NetStream)获取数据。 object_type正被发送到服务器,让它知道所需的列表类型。 服务器将使用Uint32 number_of_items回复,描述可用元素的数量。 然后,get_one_specific_type_object()将被称为number_of_items次。

3 个答案:

答案 0 :(得分:5)

听起来你可能想让这个方法变得通用:

List<T> GetObjectList<T>(byte objectType, Func<T> singleObjectGetter)

你称之为:

List<Car> cars = GetObjectList<Car>(CAR, GetOneCar);

确实你可能会发现类型推断允许你只写:

List<Car> cars = GetObjectList(CAR, GetOneCar);

你可能想要像Func<int, T>或类似的东西 - 我们无法真正说出来。说实话,还不清楚第一个参数是什么意思。如果您需要更多细节,则应提供更多背景信息。

作为旁注,我强烈鼓励您接受C#/ .NET命名约定。

答案 1 :(得分:1)

虽然我认为应该有更好的方法来实现您的功能,但这应该可以让您的代码按原样运行。

List<Car> cars_list =  get_object_list (CAR , get_one_car)
        .Cast<Car>()
        .ToList()

答案 2 :(得分:0)

您可能会考虑使用IEnumerable.Cast方法来达到此目的。

一个简单的例子可能如下:

    var objectArray = new object[]{1,2,3,4,5,8};
    var intList = objectArray .Cast<int>()