比较两个字符串,忽略C#中的大小写

本文关键字:忽略 大小写 字符串 两个 比较 | 更新日期: 2023-09-27 17:59:13

以下两项中哪一项更有效?(或者也许还有第三种选择更好?)

string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))

if (val.ToLowerCase() == "astringvalue")

比较两个字符串,忽略C#中的大小写

如果您想提高效率,请使用以下方法:

string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)

顺序比较可能比文化意识比较快得多。

然而,如果要对同一字符串进行大量比较,ToLowerCase可能是更好的选择。

与任何性能优化一样:测量它,然后决定

第一个是正确的,IMHO是更有效的,因为第二个"解决方案"实例化了一个新的字符串实例。

.ToLowerCase版本不会更快——它涉及额外的字符串分配(以后必须收集)等

就我个人而言,我会使用

string.Equals(val, "astringvalue",  StringComparison.OrdinalIgnoreCase)

这避免了所有区域性敏感字符串的问题,但因此它避免了区域性敏感的字符串的所有问题。只有你自己知道在你的情况下这是否可以。

使用string.Equals静态方法避免了valnull的任何问题。

对于这类关于"效率"的问题,我的一般答案几乎总是,哪种版本的代码可读性最强,效率最高。

话虽如此,我认为(val.ToLowerCase() == "astringvalue")在大多数人看来是可以理解的。

我所指的效率并不一定是在代码的执行中,而是在有问题的代码的维护性和一般可读性方面。

我敢说,在val为null的情况下,最安全的方法是使用静态方法String.Equals来减少NullReferenceException的可能性。

前者是最快的。事实证明val是不可变的,因此使用string.ToLowerCase()创建了一个新的字符串对象,而不仅仅是与字符串比较器进行直接比较。如果你一秒钟要创建一个新的字符串对象很多次,那么创建这个对象的成本可能会很高。

您可能还想看看已经回答的问题C#中字符串比较方法的差异

1st更高效(也是最好的选择),因为val.ToLowerCase()创建了一个新对象,因为字符串是不可变的。