36

文字列を比較するために、このコードをよく使用します。

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

これは、最初にnullの場合などを処理します。

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

(私は以前にこれを尋ねたかもしれないdejavuを持っています、もしそうなら私は謝罪します)


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

4

8 に答える 8

49

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

if (str1 == str2)

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

if (string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase))
于 2013-03-03T16:57:07.823 に答える
19

2つの文字列を互いに等しく扱いたくない場合は、コードが最適です。null

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

object.Equals(str1, str2)

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

これは、文字列を等しいものとして扱う文字列の同等性の対称チェックへの唯一のアプローチではありません。またはを使用して、にリダイレクトするnullこともできます。string.Equals(str1, str2)str1 == str2string.Equals

于 2013-03-03T16:57:17.307 に答える
17

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

String.Equals(str1, str2)
于 2015-06-26T08:25:44.727 に答える
6

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

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

次に、次のように使用します。

str1.IsNotNullAndEquals(str2);

ネーミングは、ここで最も難しいことになるでしょう IMO ... null のチェックのみであることを伝える必要があるためですstr1。拡張メソッドとして使用すると、かなりうまく読み取れますが、通常の静的として使用すると、それも伝わりません。

于 2013-03-03T17:03:03.093 に答える
1

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

object.Equals(str1, str2)
于 2013-03-03T16:58:27.763 に答える
1

This will do it:

string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
于 2018-05-16T18:57:47.627 に答える
1

Microsoftのドキュメント( https://docs.microsoft.com/en-us/dotnet/api/system.string.equals?view=net-5.0)によると、これは少し前に回答されており、良い回答があることは知っています以下を使用して、両方のケースを確認できます。

if(string.Equals(str1,str2)){
    //they are equal with null handling
}
于 2021-06-10T15:04:20.773 に答える