Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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

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从常规列表中删除项_C#_Linq_List_Lambda - Fatal编程技术网

C# 如何基于多个条件并使用linq从常规列表中删除项

C# 如何基于多个条件并使用linq从常规列表中删除项,c#,linq,list,lambda,C#,Linq,List,Lambda,我有两个列表,一个包含URL,另一个包含所有MIME文件扩展名。我想从第一个列表中删除指向这些文件的所有URL 示例代码: List<string> urls = new List<string>(); urls.Add("http://stackoverflow.com/questions/ask"); urls.Add("http://stackoverflow.com/questions/dir/some.pdf"); urls.Add("http://stacko

我有两个列表,一个包含URL,另一个包含所有MIME文件扩展名。我想从第一个列表中删除指向这些文件的所有URL

示例代码:

List<string> urls = new List<string>();
urls.Add("http://stackoverflow.com/questions/ask");
urls.Add("http://stackoverflow.com/questions/dir/some.pdf");
urls.Add("http://stackoverflow.com/questions/dir/some.doc");

//total items in the second list are 190
List<string> mime = new List<string>();
mime.Add(".pdf"); 
mime.Add(".doc"); 
mime.Add(".dms"); 
mime.Add(".dll"); 
List url=new List();
URL.Add(“http://stackoverflow.com/questions/ask");
URL.Add(“http://stackoverflow.com/questions/dir/some.pdf");
URL.Add(“http://stackoverflow.com/questions/dir/some.doc");
//第二份清单中的项目总数为190项
List mime=新列表();
mime.Add(“.pdf”);
mime.添加(“.doc”);
mime.Add(“.dms”);
mime.Add(“.dll”);
删除多个项目的一种方法是:

List<string> result = urls.Where(x => (!x.EndsWith(".pdf")) && (!x.EndsWith(".doc")) && (!x.EndsWith(".dll"))).ToList();
List result=url.Where(x=>(!x.EndsWith(.pdf))&&(!x.EndsWith(.doc))&&(!x.EndsWith(.dll)).ToList();
然而,在我的第二个列表中有190多个扩展


问题-我可以用一行从第一个列表中删除项目吗?还是使用foreach循环是唯一的方法?

如果要创建一个新列表,其中只包含与您的条件匹配的项目:

List<string> result = urls.Where(x => !mime.Any(y => x.EndsWith(y))).ToList();

这是一款适合你需要的单衬里

urls.RemoveAll(x => mime.Any(y => x.EndsWith(y)));
也许这是一种更安全的方法

urls.RemoveAll(x => mime.Contains(Path.GetExtension(x)));

当你有像
http://stackoverflow.com/questions/dir/some.ashx?ID=.pdf
你应该考虑另一种方法

@AdamHouldsworth作者已经使用了相同的方法,他创建了一个新列表,而不是从源代码中删除项目。但是,是的,用实际的删除代码更新了我的答案。是的,那很好,我只是给过路人添加了澄清:-)
Any
短路与
All
短路的方式完全相同。也许,我在周五早上的脑子里还没有完全理清逻辑。我需要通过ReSharper来确认lol,很好的链接,顺便说一句,自从我上次看它以来,它已经改变了。
urls.RemoveAll(x => mime.Contains(Path.GetExtension(x)));