C#比较字符串时忽略大小写

9

在这个测试方法中,我需要比较user3的字符串,同时忽略大小写。我认为我应该使用CultureInfo.InvariantCulture来忽略大小写。这是实现这一目标的最好方法吗?还是有更好的方法?

            //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");
3个回答

10

使用带有 ignoreCase 参数的 Assert.AreEqual 更好,因为它不需要创建新字符串(并且正如 @dtb 指出的那样,您可以遵循特定区域设置的规则进行操作)。

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

这比我原来想要做的方法简单多了。谢谢! - user216672

3

StringInstance.ToUpperInvariant()

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

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

2
在所有文化中,通过将字符串转换为大写或小写来以不区分大小写的方式进行比较是行不通的。使用字符串比较方法来比较字符串,而不是进行大小写转换! - dtb
如果它在他使用的文化中有效,这会有什么区别吗? - Corey Ogburn

1
在其简单形式中,您可以像下面这样比较两个字符串,同时忽略它们的大小写。
Assert.AreEqual(0,string.Compare("test", "TEST", true));

我不确定为什么你需要采取非特定文化案例的路线,因为案例是一个简单的(非本地化)单元测试案例。话虽如此,如果您仍想朝这个方向前进,那么请参考this链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接