我有一个目前原型为:
的功能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
次。
答案 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>()