2012-11-22 64 views
2

好,我是在得到另一個SO問題的答案的過程中,我想出了下面的函數來獲取廉政局的一個獨特的列表:爲什麼是變種的Int32本例中沒有列出<Int32>

static List<Int32> Example(params List<Int32> lsts) 
    { 
     List<Int32> result = new List<int>(); 

     foreach (var lst in lsts) 
     { 
      result = result.Concat(lst).ToList(); 
     } 

     return result.Distinct().OrderBy(c => c).ToList(); 
    } 

當我在VS2012中查看var時,它說它的類型爲Int32而不是List<Int32>。如下圖所示:

The problem

不宜VAR是List<Int32>類型?

回答

9

你在參數類型聲明的末尾缺少一個[]

//           v-- this is missing in your code 
static List<Int32> Example(params List<Int32>[] lsts) 
{ 
    List<Int32> result = new List<int>(); 

    foreach (var lst in lsts) 
    { 
     result = result.Concat(lst).ToList(); 
    } 

    return result.Distinct().OrderBy(c => c).ToList(); 
} 
+0

賓果,謝謝:)以爲這會是簡單的事情。 –

5

你被一個不同的編譯器錯誤誤導了。
您的參數不是數組。

您需要將參數更改爲params List<Int32>[] lsts以使其成爲一個列表數組。 (或更好,但params IEnumerable<Int32>[] lsts

請注意,你也可以完全擺脫了foreach環和寫入

return lsts.SelectMany(list => list) 
      .Distinct() 
      .OrderBy(i => i) 
      .ToList(); 
+0

現在明白了,謝謝:) –

0

帶有關鍵字params的參數必須是數組。

相關問題