Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自分类列表C的LINQ#_Linq_Sortedlist - Fatal编程技术网

来自分类列表C的LINQ#

来自分类列表C的LINQ#,linq,sortedlist,Linq,Sortedlist,我对C#相当陌生,对LINQ也完全陌生 我有一个SortedList类型的现有对象,我想使用LINQ对其进行过滤。然而,我似乎对此有问题,因为SortedList类型不是泛型的 目前,我已经遍历了整个SortedList,手动将其中的对象添加到一个列表中,并使用LINQ从中进行过滤。然而,在我看来,这似乎是垃圾 有没有更好的方法将我的SortedList转换为List(我不介意保留密钥)?或者确实要将我的SortedList转换为SortedList?原始SortedList类是集合的一部分。泛

我对C#相当陌生,对LINQ也完全陌生

我有一个SortedList类型的现有对象,我想使用LINQ对其进行过滤。然而,我似乎对此有问题,因为SortedList类型不是泛型的

目前,我已经遍历了整个SortedList,手动将其中的对象添加到一个列表中,并使用LINQ从中进行过滤。然而,在我看来,这似乎是垃圾


有没有更好的方法将我的SortedList转换为List(我不介意保留密钥)?或者确实要将我的SortedList转换为SortedList?原始SortedList类是集合的一部分。泛型引入了SortedList,但如果您有旧代码,那么它就不会使用它

最简单的方法是使用可用于SortedList的Cast方法或OfType扩展方法。这些方法将为您提供IEnumerable列表,您可以应用通用Linq操作。确保使用System.Linq时包含
在开始时,您应该能够执行以下操作:

sortedList.Cast<int>().Where(i=>i > 5);
sortedList.OfType<Car>().Where(c=> c.Color == Color.Blue);
sortedList.Cast(),其中(i=>i>5);
sortedList.OfType()。其中(c=>c.Color==Color.Blue);

如果不需要按键过滤,只需对值进行强制转换和过滤即可

SortedList sl = new SortedList();
sl.Add("foo", "baa");
var baas = sl.Values.Cast<string>().Where(s => s == "baa");
SortedList sl=新的SortedList();
sl.Add(“foo”、“baa”);
var baas=sl.Values.Cast(),其中(s=>s==“baa”);
那怎么办

normalList = sortedList.Items;
这会给你想要的列表吗?

回答问题“有没有更好的方法将我的SortedList转换为list(我不介意保留密钥)?”。。。下面是一个示例,最后一行作为答案,生成一个包含整数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();
SortedList SortedList=新的SortedList();
分类列表。添加(“一”,1);
分类列表。添加(“两”,2);
分类列表。添加(“三”,3);
分类列表。添加(“四”,4);
List List=sortedList.Values.ToList();

是否需要在SortedList.Keys上进行筛选?我不相信DictionaryEntry可以转换为int;您将需要指定键或值。以上只是一个示例,您可以将其转换为任何适合的内容。上面示例中的内容是将SortedList集合强制转换为IEnumerable(或者通过将int替换为yourType来实现),当然,如果类型不匹配,则强制转换将失败。方法的规范是强制转换的,其中T是参数化类型