С# сравнить строку ignoreCase

В рамках этого метода тестирования мне нужно сравнить строки user3, игнорируя чувствительность к регистру. Я думаю, что должен использовать CultureInfo.InvariantCulture для 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");

person user216672    schedule 09.05.2013    source источник


Ответы (3)


Использование Assert.AreEqual с параметром ignoreCase лучше, потому что не требует создания новой строки (и, как указывает @dtb, вы можете работать по правилам информации о конкретной культуре)

Assert.AreEqual(user1.UserName, user2.UserName, true, CultureInfo.CurrentCulture);
person Steve    schedule 09.05.2013
comment
это было намного проще, чем то, как я думал, что мне придется идти. Спасибо! - person user216672; 10.05.2013

StringInstance.ToUpperInvariant()

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

user3.UserName.ToUpperInvariant() == "TEST.USER";  
person Daniel Möller    schedule 09.05.2013
comment
Сравнение строк без учета регистра путем преобразования в верхний или нижний регистр работает не во всех культурах. Используйте методы сравнения строк для сравнения строк, а не преобразования регистра! - person dtb; 10.05.2013
comment
Если это работает в культуре, которую он использует, имеет ли это значение? - person Corey Ogburn; 10.05.2013

В простой форме; вы можете сравнить две строки, игнорируя их регистр, как показано ниже.

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

Я не уверена; почему вам нужно выбрать маршрут, не относящийся к конкретной культуре, поскольку случай представляет собой простой (не локализованный) модульный тест. Сказав это, если вы все еще хотите двигаться в этом направлении, обратитесь по ссылке this .

person Sreejith Nair    schedule 09.05.2013