C# 具有1个以上条件检查的三值运算符
我有一个场景,为了给一个变量赋值,我需要检查多个条件,是否可以将这些条件链接起来 下面只是我的代码的示例格式C# 具有1个以上条件检查的三值运算符,c#,conditional-operator,C#,Conditional Operator,我有一个场景,为了给一个变量赋值,我需要检查多个条件,是否可以将这些条件链接起来 下面只是我的代码的示例格式 Result = (isUser == true && (ResultId == 1 || ResultId == 2 )) ? "Pass" : r.Result, 如果满足条件(isUser==true&&(ResultId==1 | | ResultId==2)),那么我说的是Result=“Pass”,否则我是从r.Result赋值 同样地,我想检查另一个条件(
Result = (isUser == true && (ResultId == 1 || ResultId == 2 )) ? "Pass" : r.Result,
如果满足条件(isUser==true&&(ResultId==1 | | ResultId==2))
,那么我说的是Result=“Pass”
,否则我是从r.Result
赋值
同样地,我想检查另一个条件(isUser==True&&(ResultId==5))
,然后我想说Result=“缺席”
你的意思是这样的
Result = isUser && (ResultId == 1 || ResultId == 2 ) ?
"Pass" : isUser && ResultId == 5 ? "Absent" : r.result;
正如评论中所建议的,这对于三元运算符来说太复杂了。如果您有C#8,那么您可以将其与
开关的表达式形式结合使用。比如:
Result = isUser ? ResultId switch
{
1 => "Pass",
2 => "Pass",
5 => "Absent",
_ => r.Result
}
: r.Result;
我建议使用if
/else if
/else
模式与嵌套的三元运算符相比更易于阅读。您可能还希望跳过显式的true测试,==true
不需要,因为isUser
已经是一个bool。我同意上述观点,此代码只是不可读。将来回到这段代码,你会问自己这到底意味着什么。明确使用if/else或默认值和if-likeResult=r.Result;如果(…)Result=“通过”
如果isUser
为false,而ResultId
为5,该怎么办?是的,对不起,我没有清楚地看到他的情况!,我刚刚编辑了这篇文章,谢谢