C#如何循环列表字符串并比较值

C#如何循环列表字符串并比较值,c#,C#,我是C#新手,有一个项目,我有一个列表字符串,必须用某些扩展过滤掉一些图像。这是我的密码 // App Config <add key="FilterImages" value=".jpg ,.gif"/> List<string> _FilterList = new List<string>(); string[] FilterList = ConfigurationManager.AppSettings["FilterImages"].ToString(

我是C#新手,有一个项目,我有一个列表字符串,必须用某些扩展过滤掉一些图像。这是我的密码

// App Config
<add key="FilterImages" value=".jpg ,.gif"/>

List<string> _FilterList = new List<string>();
string[] FilterList = ConfigurationManager.AppSettings["FilterImages"].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in FilterList)
{
    _FilterList.Add(s.Trim().ToLower());
}

var files = newFiles.ListDirectory(".");
foreach (var f in files)
{
    // Here new files come and I can get the file names using
    // f.name ... How can I check for correct extension here   
}
//应用程序配置
列表_FilterList=新列表();
string[]FilterList=ConfigurationManager.AppSettings[“FilterImage”].ToString().Split(新字符[]{',},StringSplitOptions.RemoveEmptyEntries);
foreach(过滤器列表中的字符串s)
{
_FilterList.Add(s.Trim().ToLower());
}
var files=newFiles.ListDirectory(“.”);
foreach(文件中的var f)
{
//这里有新文件,我可以使用
//f.name…我如何在这里检查扩展名是否正确
}

在ForEach循环中,我想使用\u FilterList并检查新文件的文件扩展名。我可以使用f.Name获取文件名。任何建议都很好

尝试类似的方法,只需在您的
过滤器列表中查找文件扩展名即可。
这可能无法编译,但这是一个如何查找有效文件扩展名的想法

foreach (var f in files)
{
    if(_FilterList.Contains(Path.GetExtension(f.FileName))
    {
       //Do your stuff
    }
}
或者您可以使用Linq

 var allowedFiles =  files.Where(p => _FilterList.Any(l => p.Contains(l)).ToList();

尝试类似的方法,只需在
过滤器列表中查找文件扩展名即可。
这可能无法编译,但这是一个如何查找有效文件扩展名的想法

foreach (var f in files)
{
    if(_FilterList.Contains(Path.GetExtension(f.FileName))
    {
       //Do your stuff
    }
}
或者您可以使用Linq

 var allowedFiles =  files.Where(p => _FilterList.Any(l => p.Contains(l)).ToList();

首先,您可以使用LinQ对代码进行因式分解,以:

var _FilterList = ConfigurationManager.AppSettings["FilterImages"].ToString()
     .Split(',')
     .Select(p => p.Trim().ToLower())
     .ToList();

var files = newFiles.ListDirectory(".");
并使用以下命令获取筛选文件路径:

var acceptedFiles = files.Where(p => _FilterList.Any(l => p.Contains(l)).ToList();
var unAcceptedFiles = files.Where(p => !_FilterList.Any(l => p.Contains(l)).ToList();

首先,您可以使用LinQ对代码进行因式分解,以:

var _FilterList = ConfigurationManager.AppSettings["FilterImages"].ToString()
     .Split(',')
     .Select(p => p.Trim().ToLower())
     .ToList();

var files = newFiles.ListDirectory(".");
并使用以下命令获取筛选文件路径:

var acceptedFiles = files.Where(p => _FilterList.Any(l => p.Contains(l)).ToList();
var unAcceptedFiles = files.Where(p => !_FilterList.Any(l => p.Contains(l)).ToList();

首先,让我们获得要过滤掉的扩展
HashSet
似乎是一个更好的集合

HashSet<string> extensions = new HashSet<string>(ConfigurationManager
    .AppSettings["FilterImages"].ToString()
    .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(item => item.Trim()), 
  StringComparer.OrdinalIgnoreCase); // ".GIF" should be treated as ".gif"

首先,让我们获得要过滤掉的扩展
HashSet
似乎是一个更好的集合

HashSet<string> extensions = new HashSet<string>(ConfigurationManager
    .AppSettings["FilterImages"].ToString()
    .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(item => item.Trim()), 
  StringComparer.OrdinalIgnoreCase); // ".GIF" should be treated as ".gif"

看,看,这也是我的解决办法。然而,也有一些警告:区分大小写是一件事。由于foreach在后台使用枚举器,因此不能修改集合。所以“你的东西”不能是对文件的删除操作。这也是我的解决方案。然而,也有一些警告:区分大小写是一件事。由于foreach在后台使用枚举器,因此不能修改集合。所以“你的东西”不能是对文件的删除操作。