我有以下方法:
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进行第二次传统检查的条件是什么?
答案 0 :(得分:3)
以下声明可能会崩溃。如果myList
为空,则myList?.Length
将为空,myList?.Length != 0
将为 true 。这意味着myList.Where
可能会因空引用异常而崩溃。
if (myList?.Length != 0)
{
if (myListProcessingMethod(myList.Where(x => x.mySatisfiedCondition()).ToList()))
{
a = 5;
}
}
你可能想要
if (myList?.Length > 0)
...
仅当列表不为null且其长度大于0时,才会计算为 true 。