在C#中使用Lambda遇编译错误,如何正确使用FirstOrDefault?
错误原因
FirstOrDefault()返回的是符合条件的Priority实例(找不到匹配项时返回null),但else if条件必须是布尔值(true/false),直接把Priority对象放在条件里,C#无法自动将其转换为布尔值,所以触发了编译错误。
修正方法
根据你的实际需求,有两种正确的处理方式:
1. 仅判断是否存在匹配项
如果你的目的只是检查列表中是否存在与当前priority的Id相同的元素,直接使用Any()方法即可——它会直接返回布尔值:
else if (status.Priorities.Priority.Any(x => x.Id == priority.Id)) { priority.Default = "true"; }
2. 获取匹配对象后再判断
如果需要先获取匹配的Priority对象,再进行后续操作,可以先把FirstOrDefault()的结果赋值给变量,再判断变量是否不为null:
else { var matchedPriority = status.Priorities.Priority.FirstOrDefault(x => x.Id == priority.Id); if (matchedPriority != null) { priority.Default = "true"; } }
额外提醒
你当前是在遍历status.Priorities.Priority列表中的每个priority元素,所以x => x.Id == priority.Id的条件永远能匹配到当前遍历的元素,也就是说上面的条件会永远成立。如果这不是你预期的逻辑,可能需要重新梳理业务需求,比如是否要匹配其他条件(比如是否存在默认优先级)。
内容的提问来源于stack exchange,提问作者Learning
相关产品推荐
相关产品推荐

