С# Уравнение строки с нулевой обработкой

Я часто использую этот код для сравнения строки:

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

Сначала обрабатывается нулевой регистр и т.д.

Есть ли более чистый способ выполнения сравнения строк, возможно, с помощью одного вызова метода, который будет обрабатывать возможные значения NULL? Я просто хочу знать, что строки не равны, если значение тестирования равно нулю.

(У меня есть dejavu, что я, возможно, спросил об этом раньше, я прошу прощения, если так)


Обновление. В моем случае str2 является известной хорошей строкой для сравнения, поэтому мне не нужно проверять ее на null. str1 - это "неизвестная" строка, которая может быть нулевой, поэтому я хочу сказать, что "str1 не равно str2" в случаях, когда str1 имеет значение null...

Ответы

Ответ 1

В отличие от Java, строки С# переопределяют оператор ==:

if (str1 == str2)

Если вам требуется сравнение без учета регистра:

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

Ответ 2

Если вы не хотите рассматривать две строки null как равные друг другу, ваш код оптимален.

Если, с другой стороны, вы хотите рассматривать значения null равными друг другу, вы можете использовать

object.Equals(str1, str2)

для более "симметричного" подхода, который также обрабатывает значения null.

Ответ 3

Я знаю, что это несколько лет, и я думаю, что решение от dasblinkenlight функционально идеально подходит для того, что вы просили. Однако я предпочитаю этот код для удобства чтения:

String.Equals(str1, str2)

Ответ 4

Вы можете использовать этот код

object.Equals(str1, str2)

Ответ 5

Нет встроенного способа сделать это, но вы можете создать метод расширения, чтобы инкапсулировать это.

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. При использовании в качестве метода расширения он читается достаточно хорошо, но если он используется как обычный статический, то он также не передает это.