可能な重複:
異なる文字列比較方法の違いは何ですか
次の2つのうちどれがより効率的ですか? (あるいはもっと良い3つ目の選択肢はあるのでしょうか。)
string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
OR
if (val.ToLowerCase() == "astringvalue")
?
2番目の 'ソリューション'が新しい文字列インスタンスをインスタンス化するので、最初のものが正しいもので、私見がより効率的なものです。
効率を求めているなら、これを使ってください:
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
通常の比較は、カルチャ対応の比較よりもかなり高速です。
ただし、同じ文字列に対して多くの比較を行っている場合は、ToLowerCase
を使用するのがより良い方法です。
他のパフォーマンス最適化と同様に、 それを測定してから決定します。
.ToLowerCase
バージョンはそれほど速くはありません - 追加の文字列割り当て(後で収集する必要があります)などを含みます.
個人的には
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
これはカルチャセンシティブ文字列のすべての問題を回避しますが、結果として カルチャセンシティブ文字列のすべての問題を回避します 。あなただけがあなたの文脈でそれが問題ないかどうかを知っています。
string.Equals
静的メソッドを使用すると、val
がnull
であるという問題を回避できます。
「効率」に関するこの種の質問に対する私の一般的な答えは、ほとんどの場合、コードのどのバージョンが最も読みやすく、最も効率的であるかということです。
そうは言っても、(val.ToLowerCase() == "astringvalue")
は一目でほとんどの人に理解しやすいと思います。
私が言及する効率は、コードの実行に不可欠ではなく、むしろ問題となっているコードの保守性と一般的な読みやすさにあります。
最も安全なのは、valがnull
である可能性を減らすために String.Equals
を使うことです。
前者が最速です。 val
は不変であることがわかったので、単に文字列比較子と直接比較するのではなく、String.ToLowerCase()で新しい文字列オブジェクトを作成します。あなたが1秒間に何度もこれをしている場合、新しい文字列オブジェクトを作成することはコストがかかる可能性があります。
あなたはまた、すでに答えられた質問を見たいと思うかもしれません C#の文字列比較方法の違い /
Stringsは不変なので、val.ToLowerCase()
は新しいオブジェクトを作成するので、1stがより効率的です(そして可能な限り最良の選択肢です)。