2013-05-09 152 views
4

在這個測試方法中,我需要比較user3的字符串,而忽略區分大小寫。我想我應該使用CultureInfo.InvariantCulture忽略案件。這是實現這一目標的最佳方式,還是有更好的方法?C#比較字符串ignoreCase

  //set test to get user 
      AsaMembershipProvider prov = this.GetMembershipProvider();   

      //call get users 
      MembershipUser user1 = prov.GetUser("test.user", false); 
      //ask for the username with deliberate case differences 
      MembershipUser user2 = prov.GetUser("TeSt.UsEr", false); 
      //getting a user with Upper and lower case in the username. 
      MembershipUser user3 = prov.GetUser("Test.User", false); 

      //prove that you still get the user, 
      Assert.AreNotEqual(null, user1); 
      Assert.AreNotEqual(null, user2); 

      //test by using the 「.ToLower()」 function on the resulting string. 
      Assert.AreEqual(user1.UserName.ToLower(), user2.UserName.ToLower()); 
      Assert.AreEqual(user1.UserName, "test.user"); 
      Assert.AreEqual(user3.UserName, "test.user"); 

回答

5

使用Assert.AreEqual與IGNORECASE參數是更好,因爲它不需要一個新的字符串的創建(以及由@dtb指出,你可以按照特定文化信息的規則來工作)

Assert.AreEqual(user1.UserName, user2.UserName, true, CultureInfo.CurrentCulture); 
+0

這比我想我必須去的方式簡單得多。謝謝! – user216672 2013-05-09 21:57:33

3

StringInstance.ToUpperInvariant()

user1.UserName.ToUpperInvariant() == user3.UserName.ToUpperInvariant(); 

user3.UserName.ToUpperInvariant() == "TEST.USER"; 
+1

通過轉換爲大寫或小寫不區分大小寫的方式比較字符串不適用於所有文化。使用字符串比較方法來比較字符串,而不是大小寫轉換! – dtb 2013-05-09 21:45:10

+0

如果它在他所使用的文化中起作用,它是否有所作爲? – 2013-05-09 21:46:40

+0

'不變'方法解決了嗎? – 2013-05-09 21:48:01

1

這是簡單的形式;你可以比較兩個字符串,而忽略他們的情況下面。

Assert.AreEqual(0,string.Compare("test", "TEST", true)); 

我不確定;爲什麼你需要採取非文化特定案例的路線,因爲案例是一個簡單的(非本地化)單元測試案例。話雖如此,如果你仍想繼續這個方向,那麼請參考this鏈接。