Ответ 1
MS Analyzer рекомендует использовать string.IsNullOrEmpty вместо того, чтобы сравнивать его с нулевой или пустой строкой по причинам производительности
Предупреждение 470 CA1820: Microsoft.Performance: замените вызов на string.operator == (string, string) 'in... с вызовом' String.IsNullOrEmpty '.
Просто прочитайте точное руководство:
Строка сравнивается с пустой строкой с использованием Object.Equals.
...
Сравнение строк с использованием свойства String.Length или метода String.IsNullOrEmpty значительно быстрее, чем использование Equals. Это связано с тем, что Equals выполняет значительно больше инструкций MSIL, чем IsNullOrEmpty, или количество выполненных команд для извлечения значения свойства Length и сравнения его с нулем.
...
Чтобы исправить нарушение этого правила, измените сравнение, чтобы использовать свойство Length и тест для нулевой строки. Если вы планируете использовать .NET Framework 2.0, используйте метод IsNullOrEmpty.
Ваша проблема заключается не столько в проверке null
, а в тестировании для равенства (через Equals
) с пустым экземпляром string
вместо проверки его Length
.
Опять же, из тонкого руководства:
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.");
}
}