以下两种方法哪一种效率更高?(或许还有第三种更好的选择?)
string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
OR
if (val.ToLowerCase() == "astringvalue")
?
以下两种方法哪一种效率更高?(或许还有第三种更好的选择?)
string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
OR
if (val.ToLowerCase() == "astringvalue")
?
当前回答
tolowercase版本不会更快——它涉及额外的字符串分配 (以后必须收集)等等。
就我个人而言,我会使用
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
这避免了区域性敏感字符串的所有问题,但结果也避免了区域性敏感字符串的所有问题。只有你自己知道这在你的语境中是否合适。
使用字符串。Equals static方法避免了val为null的任何问题。
其他回答
前者是最快的。事实证明val是不可变的,因此使用string . tolowercase()创建了一个新的字符串对象,而不是直接与字符串比较器进行比较。如果一秒钟要做很多次,那么创建一个新的字符串对象的代价会很高。
如果你在寻找效率,可以使用这个:
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
顺序比较可能比区域性比较快得多。
然而,如果您要对同一个字符串进行大量比较,ToLowerCase可能是更好的选择。
与任何性能优化一样:衡量它,然后决定!
tolowercase版本不会更快——它涉及额外的字符串分配 (以后必须收集)等等。
就我个人而言,我会使用
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
这避免了区域性敏感字符串的所有问题,但结果也避免了区域性敏感字符串的所有问题。只有你自己知道这在你的语境中是否合适。
使用字符串。Equals static方法避免了val为null的任何问题。
你可能还想看看那个已经回答过的问题 c#中字符串比较方法的差异
第一个是正确的,以我之见,也是更有效的,因为第二个“解决方案”实例化了一个新的字符串实例。