如何根据多个条件并使用linq从通用列表中删除项目
我有两个列表,一个包含URL,另一个包含所有MIME文件扩展名。 我想从第一个列表中删除所有指向此类文件的URL。
示例代码:
List urls = new List(); urls.Add("https://stackoverflow.com/questions/ask"); urls.Add("https://stackoverflow.com/questions/dir/some.pdf"); urls.Add("https://stackoverflow.com/questions/dir/some.doc"); //total items in the second list are 190 List mime = new List(); mime.Add(".pdf"); mime.Add(".doc"); mime.Add(".dms"); mime.Add(".dll");
删除多个项目的一种方法是:
List result = urls.Where(x => (!x.EndsWith(".pdf")) && (!x.EndsWith(".doc")) && (!x.EndsWith(".dll"))).ToList();
但是,我的第二个列表中有超过190个扩展。
问题 – 我可以使用单行删除第一个列表中的项目,还是仅使用foreach循环?
如果要创建仅包含符合条件的项目的新列表:
List result = urls.Where(x => !mime.Any(y => x.EndsWith(y))).ToList();
如果要从源中实际删除项目,则应使用RemoveAll
:
urls.RemoveAll(x => mime.Any(y => x.EndsWith(y)));
这是一个适合您需求的衬垫
urls.RemoveAll(x => mime.Any(y => x.EndsWith(y)));
也许这是一个更安全的appraoach
urls.RemoveAll(x => mime.Contains(Path.GetExtension(x)));
如果你有像https://stackoverflow.com/questions/dir/some.ashx?ID=.pdf
这样的url,你应该考虑另一种方法
上述就是C#学习教程:如何根据多个条件并使用linq从通用列表中删除项目分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/941981.html