web-dev-qa-db-ja.com

null処理を使用した文字列の等価性

私はしばしばこのコードを使用して文字列を比較します:

if(!string.IsNullOrEmpty(str1) && str1.Equals(str2)){
    //they are equal, do my thing
}

これは最初にヌルケースを処理します。

おそらく、可能なnull値を処理する単一のメソッド呼び出しを使用して、文字列比較を行うよりクリーンな方法はありますか?テスト値がnullの場合、文字列が等しくないことを知りたいだけです。

(私は以前にこれを尋ねたかもしれないデジャヴを持っています、もしそうなら謝り​​ます)


更新:私の場合、str2は比較するのに適した既知の文字列であるため、nullをチェックする必要はありません。 str1は「不明な」文字列で、nullの場合があるため、str1 is null ...の場合は「str1はstr2と等しくない」と言いたい.

24
Brady Moritz

Javaとは異なり、C#文字列は==演算子をオーバーライドします。

if (str1 == str2)

大文字と小文字を区別しない比較が必要な場合:

if (String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)
35
SLaks

notを実行すると、2つのnull文字列を互いに等しいものとして扱いたい場合、コードが最適になります。

一方、null値を互いに等しいものとして扱いたい場合は、次を使用できます。

object.Equals(str1, str2)

null値も処理する、より「対称的な」アプローチの場合。

15
dasblinkenlight

これは数年前のものであり、dasblinkenlightのソリューションは、あなたが求めていたものに対して機能的に完璧だと思います。ただし、読みやすさの理由からこのコードを好みます。

String.Equals(str1, str2)
9
dotsven

これを行うための組み込みの方法はありませんが、これをカプセル化する拡張メソッドを作成できます。

public static StringExtensions
{
    public static Boolean IsNotNullAndEquals(this string str1, string str2)
    {
        return !string.IsNullOrEmpty(str1) && str1.Equals(str2)
    }
}

次のように使用します:

str1.IsNotNullAndEquals(str2);

ここでIMOの命名は最も難しいものになります...ヌルチェックstr1。拡張メソッドとして使用する場合、かなり読みやすくなりますが、通常の静的として使用する場合は、それも伝えません。

3
Justin Pihony

このコードを使用できます

object.Equals(str1, str2)
2
user1968030

これはそれを行います:

string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
0
Emad Jazer