可能重复:
不同的字符串比较方法有什么区别
以下哪两个更有效?(或者可能还有第三种选择更好吗?)
string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
Run Code Online (Sandbox Code Playgroud)
要么
if (val.ToLowerCase() == "astringvalue")
Run Code Online (Sandbox Code Playgroud)
?
在C#中比较字符串非常简单.事实上,有几种方法可以做到这一点.我在下面的块中列出了一些.我很好奇的是它们之间的差异以及何时应该使用其他的?是否应该不惜一切代价避免?还有更多我没有列出?
string testString = "Test";
string anotherString = "Another";
if (testString.CompareTo(anotherString) == 0) {}
if (testString.Equals(anotherString)) {}
if (testString == anotherString) {}
Run Code Online (Sandbox Code Playgroud)
(注意:我在这个例子中寻找平等,不小于或大于,但也可以随意发表评论)
有许多方法可以比较字符串.通过一种方式比另一种方式获得性能提升吗?
我总是选择像这样比较字符串:
string name = "Bob Wazowski";
if (name.CompareTo("Jill Yearsley") == 0) {
// whatever...
}
Run Code Online (Sandbox Code Playgroud)
但我发现很少有人这样做,如果有的话,我看到更多的人只是做一个直接的==比较,据我所知,这是比较字符串的最差方式.我错了吗?
另外,它是如何比较LINQ查询中的字符串的?例如,我喜欢做以下事情:
var results = from names in ctx.Names
where names.FirstName.CompareTo("Bob Wazowski") == 0
select names;
Run Code Online (Sandbox Code Playgroud)
但同样,我看到很少有人在他们的LINQ查询中进行字符串比较.
我有一个字符串,周围可能有空格字符,我想检查它是否基本上是空的.
有很多方法可以做到这一点:
1 if (myString.Trim().Length == 0)
2 if (myString.Trim() == "")
3 if (myString.Trim().Equals(""))
4 if (myString.Trim() == String.Empty)
5 if (myString.Trim().Equals(String.Empty))
Run Code Online (Sandbox Code Playgroud)
我知道这通常是过早优化的明显案例,但我很好奇,并且有可能做到这一点足以产生性能影响.
那么哪一个是最有效的方法呢?
有没有更好的方法我没想过?
编辑:此问题的访问者注意事项:
对这个问题进行了一些非常详细的调查 - 特别是来自Andy和Jon Skeet.
如果你在搜索某些内容时偶然发现了这个问题,那么至少阅读Andy和Jon的帖子是非常值得的.
似乎有一些非常有效的方法,最有效的方法取决于我需要处理的字符串的内容.
如果我无法预测字符串(在我的情况下我不能预测),Jon的IsEmptyOrWhiteSpace方法似乎通常更快.
谢谢大家的意见.我将选择安迪的答案作为"正确"的答案仅仅是因为他应该为他所付出的努力赢得声誉,而乔恩已经拥有了十亿美元的声誉.
在 C# 中,String.CompareOrdinal(strA, strB)相当于String.Compare(strA, strB, StringComparison.Ordinal)?
我检查了https://msdn.microsoft.com/en-us/library/e6883c06.aspx上的文档,它没有提到这一点。
c# ×5
string ×4
comparison ×2
performance ×2
.net ×1
coding-style ×1
equals ×1
linq ×1
optimization ×1