如何检查字符串是否在数组中

时间:2019-05-03 06:37:54

标签: c#

我正在尝试检查字符串是否在数组中,即使fileInfo.Name。包含文件中的字符串也可以继续。

\\FILES LIKE DATABASE.MDB IS IN C:PROJECTS\HOLON\DATABASE.MDB
                        **if (files.Any((fileInfo.Name.Contains)))** 
\\DO SOMETHING
                        Console.WriteLine(
                         fileInfo.Name, fileInfo.Length, 

3 个答案:

答案 0 :(得分:2)

如果您已经在数组中收集了文件名,那么您应该采用以下方式:

if (files.Any() && files.Contains(fileInfo.Name))
{
   // Do something
}

如果只想检查文件是否存在,则可以使用File.Exists:

if(System.IO.File.Exists(fileInfo.Name))
{
    // Do Something
}

答案 1 :(得分:0)

因此,您有完整文件路径的集合?您是否要检查其中一个或多个列表条目是否与特定文件名匹配?

也许这对您有用:

string fileToSearch = "DATABASE.MDB";
bool found = files.Any(fileName => new FileInfo(fileName).Name.ToUpper() == fileToSearch.ToUpper());

编辑:

构造新的FileInfo对象的替代方法是使用System.IO.Path:

bool found = files.Any(fileName => Path.GetFileName(fileName).ToUpper() == fileToSearch.ToUpper());

编辑2:

另一方面,如果您要搜索特定的文件名并想要使用结果,则可以执行以下操作:

var fileToSearch = "DATABASE.MDB";

var fileInfo =
    (from f in files
     let fi = new FileInfo(f)
     where fi.Name.ToUpper() == fileToSearch.ToUpper()
     select fi).FirstOrDefault();

if (fileInfo != null)
{
    if (fileInfo.Exists)
    {
        Console.WriteLine($"{fileInfo.Name} ({fileInfo.Length} bytes).");
    }
    else
    {
        Console.WriteLine($"{fileInfo.Name} (does not exist).");
    }
}

我在这里使用LINQ查询以提高可读性。您也可以使用扩展方法(files.Select(f => new FileInfo(f)).Where(fi => fi.Name.ToUpper() == fileToSearch.ToUpper()).FirstOrDefault()),但这取决于您。

答案 2 :(得分:0)

if (Array.Exists(files, element => element.Contains(fileInfo.Name)))