比较两个字符串,忽略C#中的大小写
本文关键字:忽略 大小写 字符串 两个 比较 | 更新日期: 2023-09-27 17:59:13
以下两项中哪一项更有效?(或者也许还有第三种选择更好?)
string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
或
if (val.ToLowerCase() == "astringvalue")
如果您想提高效率,请使用以下方法:
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
顺序比较可能比文化意识比较快得多。
然而,如果要对同一字符串进行大量比较,ToLowerCase
可能是更好的选择。
与任何性能优化一样:测量它,然后决定
第一个是正确的,IMHO是更有效的,因为第二个"解决方案"实例化了一个新的字符串实例。
.ToLowerCase
版本不会更快——它涉及额外的字符串分配(以后必须收集)等
就我个人而言,我会使用
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
这避免了所有区域性敏感字符串的问题,但因此它避免了区域性敏感的字符串的所有问题。只有你自己知道在你的情况下这是否可以。
使用string.Equals
静态方法避免了val
是null
的任何问题。
对于这类关于"效率"的问题,我的一般答案几乎总是,哪种版本的代码可读性最强,效率最高。
话虽如此,我认为(val.ToLowerCase() == "astringvalue")
在大多数人看来是可以理解的。
我所指的效率并不一定是在代码的执行中,而是在有问题的代码的维护性和一般可读性方面。
我敢说,在val为null
的情况下,最安全的方法是使用静态方法String.Equals
来减少NullReferenceException
的可能性。
前者是最快的。事实证明val
是不可变的,因此使用string.ToLowerCase()创建了一个新的字符串对象,而不仅仅是与字符串比较器进行直接比较。如果你一秒钟要创建一个新的字符串对象很多次,那么创建这个对象的成本可能会很高。
您可能还想看看已经回答的问题C#中字符串比较方法的差异
1st更高效(也是最好的选择),因为val.ToLowerCase()
创建了一个新对象,因为字符串是不可变的。