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.