c#中的多态返回类型

本文关键字:返回类型 多态 | 更新日期: 2023-09-27 18:28:48

我有一个函数,当前原型为:

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

由于获取元素列表的逻辑对于我所拥有的所有类型都是相同的,但获取一个元素的逻辑因类型而异,所以我希望有一个函数来获取所有类型的列表(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)中获取数据。CCD_ 5被发送到服务器以使其知道所需的列表类型。服务器将以描述可用元素数量的Uint32 number_of_items进行回复。则get_one_specific_type_object()将被调用number_of_items次。

c#中的多态返回类型

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

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命名约定。

虽然我认为应该有更好的方法来实现您的功能,但这应该能让您的代码正常工作。

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

为此,您可以考虑使用IEnumerable.Cast方法。

一个简单的例子可能看起来像:

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