私はしばしばこのコードを使用して文字列を比較します:
if(!string.IsNullOrEmpty(str1) && str1.Equals(str2)){
//they are equal, do my thing
}
これは最初にヌルケースを処理します。
おそらく、可能なnull値を処理する単一のメソッド呼び出しを使用して、文字列比較を行うよりクリーンな方法はありますか?テスト値がnullの場合、文字列が等しくないことを知りたいだけです。
(私は以前にこれを尋ねたかもしれないデジャヴを持っています、もしそうなら謝ります)
更新:私の場合、str2は比較するのに適した既知の文字列であるため、nullをチェックする必要はありません。 str1は「不明な」文字列で、nullの場合があるため、str1 is null ...の場合は「str1はstr2と等しくない」と言いたい.
Javaとは異なり、C#文字列は==
演算子をオーバーライドします。
if (str1 == str2)
大文字と小文字を区別しない比較が必要な場合:
if (String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)
notを実行すると、2つのnull
文字列を互いに等しいものとして扱いたい場合、コードが最適になります。
一方、null
値を互いに等しいものとして扱いたい場合は、次を使用できます。
object.Equals(str1, str2)
null
値も処理する、より「対称的な」アプローチの場合。
これは数年前のものであり、dasblinkenlightのソリューションは、あなたが求めていたものに対して機能的に完璧だと思います。ただし、読みやすさの理由からこのコードを好みます。
String.Equals(str1, str2)
これを行うための組み込みの方法はありませんが、これをカプセル化する拡張メソッドを作成できます。
public static StringExtensions
{
public static Boolean IsNotNullAndEquals(this string str1, string str2)
{
return !string.IsNullOrEmpty(str1) && str1.Equals(str2)
}
}
次のように使用します:
str1.IsNotNullAndEquals(str2);
ここでIMOの命名は最も難しいものになります...ヌルチェックstr1
。拡張メソッドとして使用する場合、かなり読みやすくなりますが、通常の静的として使用する場合は、それも伝えません。
このコードを使用できます
object.Equals(str1, str2)
これはそれを行います:
string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);