2016-08-24 58 views
0

試圖做到以下幾點:聲明的方法有兩個泛型參數

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); 

但我得到一個錯誤,因爲該方法嘗試接受第一個列表類型第二個列表類型。有任何想法嗎?

+4

然後聲明兩個泛型類型:'轉換(...)' – DavidG

+0

*是什麼*錯誤你? 'bills'和'payments'數據類型是什麼? – HimBromBeere

+2

你聲明兩個列表類型是相同的 - 'T'。 – Blorgbeard

回答

2

隨着你的編輯它有點清晰你所需要的。您已從類定義中獲得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 
    } 
} 
4

當你期待的類型參數不同的數據類型,你也應該不同的聲明他們:

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

你還應該注意,您必須到類型參數添加到方法聲明本身除非它們尚未通過您所在的課程申報,否則上面列出。

1

我假設您的參數是不同類型的,所以您會使用多種泛型。我相信它應該看起來像這樣。

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

+1

這與發佈的答案几乎完全相同,甚至是我上面的評論... – DavidG

+2

此外,鏈接並沒有太大的幫助,因爲它是在VB中,更重要的是它不處理**方法**與泛型類型參數,而是用類型參數處理** classess **。 – HimBromBeere