C# 在lambda中组合if条件
我有以下代码:C# 在lambda中组合if条件,c#,lambda,C#,Lambda,我有以下代码: if (ListOfMyModel.Any(a => a.SomeID != 0 && IsAuthorizedOnID(TheUserID, a.SomeID) == false) == false) { return true; } 基本上,我有一个对象列表,我将foreach循环替换为.Any(),我将向其传递lambda表达式 仅当a)SomeID不等于0的所有对象都在第二个函数中获得授权,但不必担心SomeID等于0的对象
if (ListOfMyModel.Any(a => a.SomeID != 0 &&
IsAuthorizedOnID(TheUserID, a.SomeID) == false) == false)
{
return true;
}
基本上,我有一个对象列表,我将foreach
循环替换为.Any()
,我将向其传递lambda表达式
仅当a)SomeID不等于0的所有对象都在第二个函数中获得授权,但不必担心SomeID等于0的对象的授权时,此代码才应返回true
我的表达是否正确,或者在某些情况下可能会失败
谢谢。您不应该添加所有的否定,而应该使用与您在描述中所写完全相同的代码: 如果每个用户的ID为零或已授权
与添加所有否定相反,您应该在代码中完全按照您在描述中所写的内容编写: 如果每个用户的ID为零或已授权 尝试: 或 尝试: 或
使用
而不是==false
还有,!任何(x=>x)
都可以替换为All(x=>!x)
(如果这样更容易处理的话)。SLak的建议是通用的,而不是特定于此代码。根本不要使用==false
。也不要使用==true
。使用
而不是==false
还有,!任何(x=>x)
都可以替换为All(x=>!x)
(如果这样更容易处理的话)。SLak的建议是通用的,而不是特定于此代码。根本不要使用==false
。也不要使用==true
。@user2864740问题是,提出这条宽松裤时没有将demorgan的代码应用到OP的代码中,他只是根据给定的规范重写代码,这样代码读起来就像规范一样。@SLaks:BTW,是IsAuthorizedOnID(TheUserID,a.SomeID));与IsAuthorizedOnID相同(userId,a.SomeID)=true);==true条件是隐式的吗?@frenchie:如果IsAuthorizedOnID()
返回bool
,它已经是true
或false
true==true
仍然为true,false==true
仍然为false。现在你明白了吗?请注意,如果它返回bool?
,则是另一个故事;我知道在Javascript中,您可以隐式地省略它;我不知道C#。弗伦奇:这不是语言的问题;这是关于布尔值的意思=
只是一个返回布尔值的操作符。@user2864740问题是,提出这条宽松裤并没有将demorgan的代码应用到OP的代码中,他只是根据给定的规范重写代码,这样代码读起来就像规范一样。@SLaks:BTW,是authorizedonid(TheUserID,a.SomeID));与IsAuthorizedOnID相同(userId,a.SomeID)=true);==true条件是隐式的吗?@frenchie:如果IsAuthorizedOnID()
返回bool
,它已经是true
或false
true==true
仍然为true,false==true
仍然为false。现在你明白了吗?请注意,如果它返回bool?
,则是另一个故事;我知道在Javascript中,您可以隐式地省略它;我不知道C#。弗伦奇:这不是语言的问题;这是关于布尔值的意思=
只是一个返回bool的操作符。
return list.All(a => a.SomeId == 0 || IsAuthorizedOnID(TheUserID, a.SomeID));
if (!ListOfMyModel.Any(a => a.SomeID != 0 && !IsAuthorizedOnID(TheUserID, a.SomeID))
return ListOfMyModel.All(a => a.SomeId == 0 || IsAuthorizedOnID(TheUserID, a.SomeID));