声明具有两个通用参数的方法

时间:2016-08-24 21:25:06

标签: c#

尝试执行以下操作:

public static class Qbo<T> where T : class
{
    public static List<Items> Convert(List<T> list1, List<T> list2)
    {
         // Merging lists of different types into one list
    }
}

这样打电话:

var items = Qbo<Bill>.Convert(bills, billPayments);
var moreItems = Qbo<Invoice>.Convert(invoices, payments);

但是我收到错误,因为该方法尝试接受第一个列表类型作为第二个列表类型。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

当你期望类型参数的不同数据类型时,你也应该以不同的方式声明

public static List<Items> Convert<T, U>(List<T> list1, List<U> list2)

您还应注意,您必须将类型参数添加到上面所示的方法声明中,除非它们尚未通过您所在的类声明。

答案 1 :(得分:3)

通过编辑,您可以更清楚地了解您的需求。您已经从类定义中获得T,但现在需要该方法的另一种泛型类型。因此,也要使方法调用泛型:

public static class Qbo<T> where T : class
{
    public static List<Items> Convert<U>(List<T> list1, List<U> list2)
    //                               ^^^                    ^^^
    {
         // Merging lists of different types into one list
    }
}

答案 2 :(得分:2)

我假设您的参数属于不同类型,因此您将使用多个泛型。我相信它看起来应该是这样的。

public static List<Items> Convert<T, U> (List<T> list1, List<U> list2)
{
}

以下是关于泛型的文档,其中应包含具有多个泛型的方法。 https://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx