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
次。
听起来你可能想让这个方法通用化:
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>()