C# Null Условный оператор внутри аргумента метода

У меня есть следующие методы:

float myMethod(MyObject[][] myList) 
{
      float a = 0;
      if (myListProcessingMethod(myList?.Where(x => x.mySatisfiedCondition()).ToList()))
      {
            a = 5;
      }
      return a;
}

bool myListProcessingMethod(List<MyObject[]> myList)
{
      bool isSuccess = false;
      if (myList.Any())
      {
            isSuccess = true;
      }
      return isSuccess;
}

Я считаю это условие:

if (myListProcessingMethod(myList?.Where(x => x.mySatisfiedCondition()).ToList()))

Я рефакторинг моего состояния для:

if (myList?.Length != 0)
{
      if (myListProcessingMethod(myList.Where(x => x.mySatisfiedCondition()).ToList()))
      {
            a = 5;
      }
}

Это два условия эквивалентны? Что эквивалентно условию первого NullConditionOperator традиционным способом? Что эквивалентно условию второй традиционной проверки с использованием NullConditionalOperator?

1 ответ

Решение

Заявление ниже может привести к сбою. Если myList нулевой, myList?.Length будет нулевым и myList?.Length != 0 будет правдой. Это означает myList.Where может произойти сбой с исключением нулевой ссылки.

if (myList?.Length != 0)
{
  if (myListProcessingMethod(myList.Where(x => x.mySatisfiedCondition()).ToList()))
  {
        a = 5;
  }
}

ты наверное хочешь

if (myList?.Length > 0) 
...

который будет иметь значение true, только если список не равен нулю, а его длина больше 0.

Другие вопросы по тегам