2011-09-01 100 views
4

我有一個函數,它將IList<string> someVariable作爲參數。我想將其轉換爲列表,以便我可以按字母順序對值進行排序。將IList <string>轉換爲列表<string>()

我該如何做到這一點?

+1

實際上您是否需要對列表進行排序,或者只是按特定順序對它進行迭代? – R0MANARMY

回答

8

你可以做

var list = new List<string>(myIList); 
list.Sort(); 

var list = myIList as List<string>; 
if (list != null) list.Sort; // ... 
+0

僅僅因爲給定的'IList '不是特別的'List ',並不意味着你不能對其進行分類。 ['ReadOnlyCollection'](http://msdn.microsoft.com/en-us/library/ms132474.aspx)實現'IList ',但不是'List '。您仍然應該能夠複製它並對其進行分類。你發佈的第二個例子是錯誤的。 – R0MANARMY

+0

也許我並沒有100%清楚 - 這是沒有錯的,它只是在這種情況下不工作(排序不會被稱爲) - 但謝謝你的提示 - 我想這裏有足夠的例子來選擇一個: ) – Carsten

+0

*在這種情況下*不起作用*沒有錯誤? 「IList '大概** ** IList '是如何實現的是一個不重要的實現細節,可以在沒有警告的情況下進行更改。你的第二個例子會默默地開始失敗。我會說強制一個明確的依賴關係,如果沒有一個是錯誤的**。 – R0MANARMY

5

的IList實現IEnumerable。使用.ToList()方法。

var newList = myIList.ToList(); 
newList.Sort(); 
+1

我想你需要在'.ToList'之前調用'.Cast <>' – 2011-09-01 13:18:34

7
IList<string> someVariable = GetIList(); 
List<string> list = someVariable.OrderBy(x => x).ToList(); 
2

您可以使用LINQ排序的IList<string>像這樣:

IList<string> foo = .... ; // something 
var result = foo.OrderBy(x => x); 
1

您不必轉換到一個列表的事情進行排序。您的排序方法是否需要列表,但不接受IList?我會認爲這是實際的問題。

此外,如果你確實需要一個List,如果你的IList realy是一個List(有點可能),你可以這樣解釋它。所以我會首先檢查它是否已經是一個列表,然後再創建一個新列表

var concreteList = parameter as List<T> ?? parameter.ToList(); 
相關問題