C# 方法输入和输出集合中的多个泛型类型

C# multiple generic types in method input and output collection

我有如下所示的通用查询方法

List<T> Query<T>(QueryModel query) where T : BaseClass 
{
      // get data and Deserialize by T
}

// where T is Table DTO, to Deserialize response by T

现在想实现多查询并行执行

为此,我需要在响应和输入中使用多个类型参数,并希望实现这样的目标:

List<T1, T2, T3> Query<T1, T2, T3>(List<QueryModel> queries) 
     where T1: BaseClass,
     where T2: BaseClass,
     where T3: BaseClass 
{
     // for each query in queries
     // get data for each query and 
     // deserialize each by T1/T2/T3 accordingly
     // return all responses in single generic collection
}

在上面的示例中,可以有 3 个查询,每个查询都可以通过相应地提供的类型化参数进行反序列化。

但我相信我们不能有超过一个类型的参数与像 List 这样的集合,不知道如何实现。

PS :我现在可以使用有限的表集进行查询,例如使用 3-4 个类型参数进行查询,因此可以添加具有固定数量的类型参数的重载,如果有就更好了是 n 个类型参数的一些解决方案。

你或许可以这样写

(T1 r1, T2 r2, T3 r3) Query<T1, T2, T3>(QueryModel q1,QueryModel q2,QueryModel q3 )

这将不允许任意数量的查询,但无论如何您都不能拥有可变数量的泛型参数,所以我看不出有什么方法可以在保留泛型类型的同时做到这一点。

从 C# 7.0 开始,我相信您可以使用元组,例如

    List<(T1, T2, T3)> Get<T1,T2,T3>(string query) where T1 : BaseClass, new() where T2 : BaseClass, new() where T3 : BaseClass, new()
    {
        var result = new List<(T1, T2, T3)>
        {
            ( new T1(), new T2(), new T3()),
            ( new T1(), new T2(), new T3())

        };

        return result; 
    }