c# - C# 中的多态返回类型

标签 c#

我有一个函数,目前原型(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/

相关文章:

c# - 如何从大文件中读取特定量的数据

c# - 在区域内的 View 中使用 MVC HtmlHelper 扩展方法

c# - 在不添加 WebReference 的情况下调用 Webservice - 具有复杂类型

c# - 如何使用 C# asp.net 在静态方法中查找 Div id

c# - 启动 ConfigureServices AddMvc() 中的 KeyNotFoundException

c# - 实现接口(interface)正确的术语

c# - 从datagridview点击显示图像

c# - 关于GAC中DLL安装的问题

c# - 继承 ApiController 与 IHttpController 的区别

c# - 数据库删除行