c# -如何将两个泛型类型的数据连接在一起



是否可以使用反射将两种类型连接在一起(例如在列表中执行. adrange) ?类似于此响应https://stackoverflow.com/a/8702650/13112059,但这里来自目标对象的数据被替换。

public class ItemsResponse
{
public List<Items> Items{ get; set; } = new List<Items>();
}

在我的情况下,我从API接收响应并将数据转换为仅在运行时定义的类型,例如,但随后我还需要做另一个请求,我从相同类型接收数据,并且我想将这些对象连接在一起以将它们作为一个返回。

请求示例:

public static async Task<T> Query()
{
var response = new T();
var response2 = new T();
response = (T)await RequestAsync(); // First request
/// ...
response2 = (T)await RequestAsync(); // Second request
// I want to return an object containing data from the two responses
}

谢谢!

泛型类型参数,即<T>不是运行时类型。类型仍然是静态已知的,只是不是由这段特定的代码知道的。迟早您必须为T提供一个实际的类型,这可能在某些第三方代码中完成,但在编译时仍然是已知的。当然,it可以在运行时定义,但在这里并不重要。

如果你想创建一个响应列表,你只需要在处理这些类型的任何类或方法中包含泛型类型参数。

public static List<T> MakeRequests<T>(MyRequestObject obj){
var items = new List<T>();
items.Add(obj.Query());
// Do more queries, or whatever else you want

return items;
}

您不能真正使用查询返回的对象,除非将它们放入集合中,或者将它们转换为stringobject。因此,像这样的泛型代码通常仅限于需要完成的相当简单的事情,而不管实际类型是什么。

集合可以包含像元组这样的东西,即(T Request1, T Request2),但是你不能将两个对象组合成一个相同类型的对象,至少不能在没有大量反射的情况下。

最新更新