方法参数内的 C# Null 条件运算符
C# Null Conditional Operator inside method argument
我有以下方法:
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 进行第二次传统检查的等效条件是什么?
下面的语句可能会崩溃。如果 myList
为 null,则 myList?.Length
将为 null,而 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。
我有以下方法:
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 进行第二次传统检查的等效条件是什么?
下面的语句可能会崩溃。如果 myList
为 null,则 myList?.Length
将为 null,而 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。