来自SortedList C#的LINQ

时间:2010-03-03 09:49:34

标签: linq sortedlist

我是C#的新手,对LINQ来说是全新的。

我有一个SortedList类型的现有对象,我想通过LINQ过滤它。但是我似乎遇到了这个问题,显然因为SortedList类型不是通用的。

对于时间安排,我已遍历整个SortedList并手动将对象添加到List中,并使用LINQ从那里进行过滤。然而,在我看来,这似乎是垃圾。

有没有更好的方法将我的SortedList转换为List<> (我对保存密钥并不感到烦恼)?或者确实将我的SortedList转换为SortedList<>也许?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

如果您不需要按键过滤,只需对值

进行投射和过滤
SortedList sl = new SortedList();
sl.Add("foo", "baa");
var baas = sl.Values.Cast<string>().Where(s => s == "baa");

答案 2 :(得分:0)

怎么样?
normalList = sortedList.Items;

这会给你你想要的清单吗?

答案 3 :(得分:0)

回答问题&#34;有没有更好的方法将我的SortedList转换为List&lt;&gt; (我不担心保留密钥)?&#34; ...这是示例,最后一行作为答案,导致列表中包含整数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();