gpt4 book ai didi

c# - C# 中的字符串比较性能

转载 作者:IT王子 更新时间:2023-10-29 04:36:31 25 4
gpt4 key购买 nike

有很多方法可以比较字符串。以一种方式代替另一种方式会带来性能提升吗?

我总是选择像这样比较字符串:

string name = "Bob Wazowski";
if (name.CompareTo("Jill Yearsley") == 0) {
// whatever...
}

但我发现很少有人这样做,如果有的话,我看到更多的人只是直接进行 == 比较,据我所知,这是比较字符串的最糟糕的方法。我错了吗?

此外,在 LINQ 查询中比较字符串的方式是否有所不同?例如,我喜欢执行以下操作:

var results = from names in ctx.Names
where names.FirstName.CompareTo("Bob Wazowski") == 0
select names;

但同样,我看到很少有人在他们的 LINQ 查询中像这样进行字符串比较。

最佳答案

根据反射器

"Hello" == "World"

相同
String.Equals("Hello", "World");

这基本上确定它们是否是相同的引用对象,如果它们中的任何一个为空,如果一个为空而另一个不为空,这将自动为 false,然后比较不安全循环中的每个字符。所以它根本不关心文化规则,这通常没什么大不了的。

"Hello".CompareTo("World") == 0

相同
CultureInfo.CurrentCulture.CompareInfo.Compare("Hello", "World", CompareOptions.None);

就功能而言,这基本上是相反的。它考虑了文化、编码和上下文中字符串的所有其他内容。

所以我认为 String.CompareTo 比相等运算符慢几个数量级

至于您的 LINQ,您是否使用 LINQ-to-SQL 并不重要,因为两者都会生成相同的 SQL

var results = from names in ctx.Names
where names.FirstName.CompareTo("Bob Wazowski") == 0
select names;

SELECT [name fields]
FROM [Names] AS [t0]
WHERE [t0].FirstName = @p0

所以对于 LINQ-to-SQL,您实际上并没有获得任何好处,除了更难阅读代码和可能更多的表达式解析。如果您只是将 LINQ 用于标准数组内容,那么我上面列出的规则适用。

关于c# - C# 中的字符串比较性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/859005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com