2010-03-03 53 views
2

我對C#相當陌生,並且對於LINQ來說是全新的。來自SortedList的LINQ C#

我有一個SortedList類型的現有對象,我想通過使用LINQ進行過濾。不過,我似乎有這個問題,顯然是因爲SortedList類型不是通用的。

對於時間來說,我已經遍歷整個SortedList並手動將對象添加到列表中,並使用LINQ從那裏進行過濾。但是,對我來說,好吧,垃圾。

有沒有更好的方法來將我的SortedList轉換爲列表<>(我不關心保存密鑰)?或者的確將我的SortedList轉換爲SortedList>可能嗎?

+0

一些示例代碼和數據? – amelvin 2010-03-03 09:51:53

+0

您是否需要篩選SortedList.Keys? – si618 2010-03-03 10:14:18

回答

3

Original SortedList類是Collection的一部分。泛型介紹SortedList,但如果你有舊代碼,那麼它不會使用它。

最簡單的方法是使用可用於SortedList的Cast方法或OfType擴展方法。這些方法會給你IEnumerable列表,你可以應用通用的Linq操作。請確保您在using System.Linq;開始,那麼你應該能夠做到象下面這樣:

sortedList.Cast<int>().Where(i=>i > 5); 
sortedList.OfType<Car>().Where(c=> c.Color == Color.Blue); 
+0

我不相信DictionaryEntry可以轉換爲int;您將需要指定鍵或值。 – si618 2010-03-03 10:17:40

+0

以上只是一個例子,你可以將它投射到任何適合的地方。它在上面的例子中說的是將SortedList集合轉換爲一個IEnumerable (或者將int替換爲yourType的任何你喜歡的東西),當然如果類型不匹配,轉換將失敗。該方法的規範是Cast 其中T是參數化類型 – 2010-03-03 10:21:59

0

如果您不需要通過按鍵進行過濾,只投和過濾的價值觀

SortedList sl = new SortedList(); 
sl.Add("foo", "baa"); 
var baas = sl.Values.Cast<string>().Where(s => s == "baa"); 
0

什麼約

normalList = sortedList.Items; 

這是否給你你想要的清單?

0

要回答「有沒有更好的方法來將我的SortedList轉換爲列表<>(我不打算保存關鍵字)?」...下面是一個例子,最後一行作爲答案,結果列表中包含整數4,1,3,2:

SortedList<string,int> sortedList = new SortedList<string,int>(); 
sortedList.Add("One", 1); 
sortedList.Add("Two", 2); 
sortedList.Add("Three", 3); 
sortedList.Add("Four", 4); 
List<int> list = sortedList.Values.ToList();