在C#中将大写字母和小写字母视为True

46 浏览
0 Comments

在C#中将大写字母和小写字母视为True

如何使下面的代码不区分大小写?

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);

我今天早些时候得到了一些建议,建议我使用:

x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));

问题是我无法让它正常工作,我尝试了下面的代码,它可以编译通过,但返回的结果是错误的,已注册用户被返回为未注册,未注册用户被返回为已注册。

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], 
                                 StringComparison.OrdinalIgnoreCase)));

有人能指出问题吗?

0
0 Comments

问题出现的原因是在C#中默认情况下,字符串的比较是区分大小写的,即大写字母和小写字母被视为不同的字符。然而,在某些情况下,我们可能需要忽略字符串中的大小写进行比较。

解决方法是使用String.Equals方法,并设置StringComparison.CurrentCultureIgnoreCase参数。这将允许我们在比较字符串时忽略大小写。

下面是解决方法的代码示例:

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);

需要注意的是,使用CurrentCultureIgnoreCaseOrdinalIgnoreCase相比,有一些优势和潜在的问题。如果我们不需要考虑文化比较的语义,可以选择使用OrdinalIgnoreCase进行比较。这样可以提高性能。

总结起来,要在C#中忽略字符串比较中的大小写,我们可以使用String.Equals方法,并设置适当的StringComparison参数来实现。

0
0 Comments

在C#中,有一个关于字符串相等性检查的问题:是否应该接受大小写不敏感的字符串作为相等。这个问题的出现是因为在.NET框架中,使用String.Compare方法进行字符串相等性检查被认为不是最佳实践。相反,应该使用String.Equals方法进行相等性检查。这是因为String.Compare方法和String.CompareTo方法主要用于字符串排序,而不是用于检查相等性。

根据MSDN的推荐,我们应该使用String.Equals方法来测试两个字符串是否相等。同时,String.Compare方法和String.CompareTo方法应该用于字符串排序,而不是用于检查相等性。

在C#中,使用string关键字来表示字符串是更好的实践,因为它是一个语言关键字。而String是.NET中的一个类,可能不仅仅指代System.String类。此外,使用string关键字可以确保在C#中始终存在,而String则是.NET的一部分。

关于检查子字符串的相等性(不区分大小写),可以继续使用IndexOf方法。

有人问为什么使用string.Equals(a, b, StringComparison.OrdinalIgnoreCase)比a?.ToLower() == b?.ToLower()更好。这是因为字符串比较并不像简单的"相等性"那么简单。例如,在英语中,"encyclopaedia"和"encyclopædia"是等效的,尽管它们不是相同的字符串。string.Equals方法允许在比较时指定文化细节。此外,使用string.Equals方法更能清楚地表达意图。

另一个人提到了使用string.Equals方法的性能问题。因为第二种方法需要将a和b复制到额外的内存中以保存它们的小写版本,这对于大字符串来说可能是昂贵的,并且需要对这两个新字符串进行第二次迭代。想象一下,如果a和b是长的大写但相同的字符串,那么这将会非常耗时。

最后,还有关于使用string和String的区别的讨论。尽管String是.NET的一部分,但如果在.NET中存在某个东西,那么它就一定存在于C#中。使用string关键字可以使代码更具可读性和直观性,并且可以在任何.NET语言中使用,而不仅仅是在C#中。

0
0 Comments

问题的出现原因:原回答中使用了String.Compare方法进行字符串比较,但该方法会返回一个整数值,需要进一步判断是否等于0,有点过于繁琐。因此,提问者认为应该使用String.Equals方法进行字符串比较,直接返回一个布尔值。

问题的解决方法:改用String.Equals方法进行字符串比较,可以简化代码,直接返回一个布尔值。这样可以更直观地判断两个字符串是否相等。

对于提问者的观点,回答者认为应该根据实际需求选择使用IEquatableIComparable接口。这两个接口的功能不同,可以根据具体情况来实现。例如,如果要对传感器采样进行排序,可以实现IComparable接口;如果要判断物体是否相等,可以实现IEquatable接口。

回答者认为,旧回答中的信息如果不准确,应该进行评论和点赞,因为这些信息仍然会影响今天的读者。然而,提问者认为旧回答不应该修改,因为最佳实践和性能选择可能会发生多次变化。

文章整理如下:

在C#中,有人提出了一个问题,关于如何在字符串比较中接受大写和小写字母的问题。原回答中使用了String.Compare方法进行字符串比较,但提问者认为应该使用String.Equals方法,以简化代码。对此,回答者表示应该根据实际需求选择使用IEquatableIComparable接口。

回答者解释说,IEquatableIComparable接口的功能不同,可以根据具体情况来实现。例如,如果要对传感器采样进行排序,可以实现IComparable接口;如果要判断物体是否相等,可以实现IEquatable接口。

对于提问者认为旧回答不应该修改的观点,回答者表示旧回答中的信息如果不准确,应该进行评论和点赞,因为这些信息仍然会影响今天的读者。最后,双方对于旧回答的修改问题存在分歧。

在C#中,根据具体需求选择使用String.CompareString.Equals方法进行字符串比较。同时,根据实际情况选择实现IEquatableIComparable接口。对于旧回答中的不准确信息,应该进行评论和点赞,以便给今天的读者提供正确的信息。

0