2

我有一个功能,目前原型为:

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() 位于客户端组件中,它从网络资源 (aNetStream) 中获取数据。 object_type正在发送到服务器以使其知道所需的列表类型。服务器将回复Uint32 number_of_items描述可用元素的数量。然后,get_one_specific_type_object()将被称为number_of_items次。

4

3 回答 3

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

于 2013-08-22T13:45:53.863 回答
1

尽管我认为应该有更好的方法来实现您的功能,但这应该可以使您的代码按原样工作。

List<Car> cars_list =  get_object_list (CAR , get_one_car)
        .Cast<Car>()
        .ToList()
于 2013-08-22T13:46:25.230 回答
0

您可能会考虑为此目的使用IEnumerable.Cast方法。

一个简单的示例可能如下所示:

    var objectArray = new object[]{1,2,3,4,5,8};
    var intList = objectArray .Cast<int>()
于 2013-08-22T13:42:43.677 回答