我可以使用 C# 使“包含”方法不区分大小写吗?

问题描述 投票:0回答:6

我正在使用 .NET 4.5 和 C#。如果拼写区分大小写,我下面的代码可以正常工作。换句话说,如果该文件的拼写与“SetupV8.exe”完全相同。但我真的需要它不区分大小写。我玩过,但找不到方法。

foreach (string file in directory.EnumerateFiles((AppDomain.CurrentDomain.BaseDirectory),  
         "*.exe", SearchOption.AllDirectories))
{
   if (!file.Contains("SetupV8.exe")
   {    
      // Do something
   }
}
c# .net
6个回答
10
投票

string.Contains 只是 string.IndexOf 的包装,正如您从 NET 资源中看到的那样

public bool Contains(string value)
{
    return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}

并且 string.IndexOf 有一个适当的参数来忽略要搜索的字符串的大小写

 if (file.IndexOf("SetupV8.exe", StringComparison.OrdinalIgnoreCase) >= 0)
     // File found

字符串比较枚举


3
投票

根据 MSDN 文章,无论大小写,您都可以传入

StringComparison.OrdinalIgnoreCase
进行比较。

file.name.Contains("SetupV8.exe", StringComparison.OrdinalIgnoreCase)

这会更有效,因为您不会在此过程中创建两个可变字符串,并且在我看来,这看起来比使用

.toLower()

更干净

但是您应该考虑一下您在这里检查的内容,文件哈希会更好吗?如果您假设文件的内容是已知的,则可能会引入安全问题。


2
投票

如果您想比较包含扩展名但不包含目录的整个文件名:

file.Name.Equals(fileNameAndExt, StringComparison.OrdinalIgnoreCase)

file.FullName
还包括目录名称。
StringComparison.OrdinalIgnoreCase
是最快的比较方法,因为它不应用特定于培养物的处理。这是正确的方法,因为文件系统也不这样做。


0
投票

file.ToLower().Contains("setupv8.exe")
通常工作得很好。 (尽管您可能想考虑 EndsWith)

此外,由于

EnumerateFiles
返回
FileInfo
,您不妨检查其
Name
属性:

foreach (FileInfo file in directory.EnumerateFiles((AppDomain.CurrentDomain.BaseDirectory),  
         "*.exe", SearchOption.AllDirectories))
{
   if (!file.Name.ToLower().Contains("setupv8.exe")
   {    
      // Do something with file
   }
}

另外,如果名称“SetupV8.exe”并且您不希望它有任何前缀/后缀,那么此时也许只需直接检查是否相等。

编辑:也许更重要的是,您可能想要仅使用文件名。除非您想检查目录路径的any部分是否匹配。也就是说,您可能不希望

c:\temp\setupv8.exe_directory\subdirectory\setupv8.exe
匹配为误报。

为新读者编辑 8 年后:在某些边缘情况下使用

ToLower()
可能会带来一些意想不到的结果,所以也许最好使用
ToLowerInvariant()
来代替。


0
投票

只需将字符串强制全部小写即可进行比较..

file.ToLower().Contains("setupv8.exe")

0
投票

只需制作一个扩展方法

public bool Contains(this string my,string his)
 {
      return my.ToLower().Contains(his.ToLower());
 }

用法

....
if(file.Contains("SetupV8")) // the case is ignored !
....
....
© www.soinside.com 2019 - 2024. All rights reserved.