簡體   English   中英

我可以使用C#使“包含”方法不區分大小寫嗎?

[英]Can I make a “Contains” Method be case insensitive with C#?

我正在使用.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
   }
}

謝謝

從NET資源中可以看到, string.Contains只是string.IndexOf的包裝。

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

和string.IndexOf具有適當的參數來忽略要搜索的字符串的大小寫

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

StringComparison枚舉

根據MSDN文章,您可以傳入StringComparison.OrdinalIgnoreCase進行比較(無論大小寫)。

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

這將更加有效,因為您不會在此過程中創建兩個可變字符串,而且我認為比使用.toLower()更干凈

但是,您應該考慮在此處檢查的內容,文件哈希會更好嗎? 如果假設文件的內容是已知的,則可能會引入安全問題。

如果要比較包括擴展名但不帶目錄的整個文件名:

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

file.FullName還包括目錄名稱。 StringComparison.OrdinalIgnoreCase是最快的比較方法,因為它不應用特定於文化的處理方法。 這是正確的方法,因為文件系統也不會這樣做。

只需將您的字符串全部小寫以進行比較。

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

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”,並且您不希望它帶有任何前綴/后綴,那么此時也許直接檢查是否相等即可。

編輯:也許更重要的是,您可能只想使用文件名。 除非您要檢查目錄路徑的任何部分是否匹配。 也就是說,您可能不希望將c:\\temp\\setupv8.exe_directory\\subdirectory\\setupv8.exe匹配為誤報。

8年后針對新讀者的編輯:在某些情況下,使用ToLower() 可能會帶來一些意外的結果 ,因此也許最好使用ToLowerInvariant()

只是做一個擴展方法

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

用法

....
if(file.Contains("SetupV8")) // the case is ignored !
....
....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM