我有一个函数,目前原型(prototype)为:
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
)获取数据。
object_type
被发送到服务器以使其知道所需的列表类型。
服务器将回复 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 命名约定。
关于c# - C# 中的多态返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382111/