Поделиться через


CA1820: проверьте наличие пустых строк путем проверки длины строки

Свойство Значение
Идентификатор правила CA1820
Заголовок Проверяйте наличие пустых строк, используя длину строки
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

Строка сравнивается с пустой строкой с помощью метода Object.Equals.

Описание правила

Сравнение строк с помощью свойства String.Length или метода String.IsNullOrEmpty выполняется быстрее, чем при использовании метода Equals. Это связано с тем, что Equals выполняется значительно больше инструкций CIL, чем IsNullOrEmpty количество выполняемых инструкций для получения Length значения свойства и сравнения с нулем.

Для строк, имеющих значение NULL, Equals и <string>.Length == 0 ведут себя иначе. При попытке получить значение свойства Length в строке, имеющей значение NULL, среда CLR выдаст исключение System.NullReferenceException. При сравнении строки, имеющей значение NULL, и пустой строки среда CLR не создает исключение и возвращает false. Тестирование на наличие значения NULL не оказывает существенного влияния на относительную производительность этих двух подходов. При нацеливании на платформу .NET Framework 2.0 или более поздней версии используйте метод IsNullOrEmpty. В противном случае используйте сравнение Length = = 0 везде, где это возможно.

Устранение нарушений

Чтобы исправить нарушение этого правила, используйте в сравнении метод IsNullOrEmpty.

Когда лучше отключить предупреждения

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

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

Пример

В следующем примере показаны различные способы поиска пустой строки.

public class StringTester
{
    string s1 = "test";

    public void EqualsTest()
    {
        // Violates rule: TestForEmptyStringsUsingStringLength.
        if (s1 == "")
        {
            Console.WriteLine("s1 equals empty string.");
        }
    }

    // Use for .NET Framework 1.0 and 1.1.
    public void LengthTest()
    {
        // Satisfies rule: TestForEmptyStringsUsingStringLength.
        if (s1 != null && s1.Length == 0)
        {
            Console.WriteLine("s1.Length == 0.");
        }
    }

    // Use for .NET Framework 2.0.
    public void NullOrEmptyTest()
    {
        // Satisfies rule: TestForEmptyStringsUsingStringLength.
        if (!String.IsNullOrEmpty(s1))
        {
            Console.WriteLine("s1 != null and s1.Length != 0.");
        }
    }
}