我有两个列表,一个包含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<string> result = urls.Where(x => (!x.EndsWith(".pdf")) && (!x.EndsWith(".doc")) && (!x.EndsWith(".dll"))).ToList();
但是,我的第二个列表中有超过190个扩展名。
问题 - 我可以使用单行删除第一个列表中的项目,还是仅使用foreach循环?
答案 0 :(得分:15)
如果您想创建一个只包含符合您条件的项目的新列表:
List<string> result = urls.Where(x => !mime.Any(y => x.EndsWith(y))).ToList();
如果您想从源中删除项目,请使用RemoveAll
:
urls.RemoveAll(x => mime.Any(y => x.EndsWith(y)));
答案 1 :(得分:9)
这是一个符合您需求的衬垫
urls.RemoveAll(x => mime.Any(y => x.EndsWith(y)));
也许这是一个更安全的appraoach
urls.RemoveAll(x => mime.Contains(Path.GetExtension(x)));
当您拥有http://stackoverflow.com/questions/dir/some.ashx?ID=.pdf
这样的网址时,您应该考虑另一种方法