我是C#的新手,对LINQ来说是全新的。
我有一个SortedList类型的现有对象,我想通过LINQ过滤它。但是我似乎遇到了这个问题,显然因为SortedList类型不是通用的。
对于时间安排,我已遍历整个SortedList并手动将对象添加到List中,并使用LINQ从那里进行过滤。然而,在我看来,这似乎是垃圾。
有没有更好的方法将我的SortedList转换为List<> (我对保存密钥并不感到烦恼)?或者确实将我的SortedList转换为SortedList<>也许?
答案 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();